Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
>
restart: > with(plots):with(LinearAlgebra): Warning, the name changecoords has been redefined Aproksymacja Aproksymacja funkcji dyskretnej > n:=9; n 9 > X:=array(0..n,[0,1,2,3,4,5,6,7,8,9]): > Y:=array(0..n,[-1.2,-8,-22.1,-37.6,-49.5,-58.7,-54.0,-39.3,-3.5, 54.1]): > plot(zip((x,y)->[x,y],X,Y),style=point,symbol=cross,symbolsize=3 0); := > pkt:=%: > Generowanie i rozwiazanie ukladu równan na wspolczynniki wielomianu aproksymujacego a [ j ] = ∑∑ n m S [ y a x j ] 2 k j k k = 0 = 0 > m:=3; # Digits:=20; # dla m=9 m 3 > S:=add((Y[k]-add(a[j]*X[k]^j,j=0..m))^2,k=0..n); := S ( := − − 1.2 a 0 ) 2 + ( − − − − − 8 a 0 a 1 a 2 a 3 ) 2 + ( − − − − − 2 a 1 4 a 2 8 a 3 ) 2 + ( − − − − − 37.6 a 0 3 a 1 9 a 2 27 a 3 ) 2 + ( − − − − − 49.5 a 0 4 a 1 16 a 2 64 a 3 ) 2 + ( − − − − − 58.7 a 0 5 a 1 25 a 2 125 a 3 ) 2 + ( − − − − − 6 a 1 36 a 2 216 a 3 ) 2 + ( − − − − − 39.3 a 0 7 a 1 49 a 2 343 a 3 ) 2 + ( − − − − − 8 a 1 64 a 2 512 a 3 ) 2 + > for i from 0 to m do ( 54.1 a 0 − − − − 9 a 1 81 a 2 729 a 3 ) 2 j 22.1 a 0 54.0 a 0 3.5 a 0 r||i:=diff(S,a[i])=0; end do; r0 := 20 a 0 + + + + 90 a 1 570 a 2 4050 a 3 439.6 0 = r1 := 90 a 0 + + + 570 a 1 4050 a 2 30666 a 3 + 1593.4 0 = r2 := 570 a 0 + + 4050 a 1 30666 a 2 + 241650 a 3 + 4811.8 0 = r3 := 4050 a 0 + 30666 a 1 + 241650 a 2 + 1956810 a 3 − 1595.0 0 = > roz:=solve({r||(0..m)},{seq(a[i],i=0..m)}); := roz { a 2 = -5.098892774 = , a 1 -2.753399378 = , a 0 -1.175104895 = , a 3 0.6760683761 } > assign(roz): > g1:=add(a[j]*x^j,j=0..m); # wielomian aproksymujący := g1 − 1.175104895 2.753399378 x 5.098892774 x 2 − − + 0.6760683761 x 3 > p:=plot(g1,x=0..n): > display([pkt,p]); > S; 4.588004950 ε= − > epsilon:=evalf(sqrt(S/(X[n]-X[0]))); :=ε 0.7139876244 S ba > a:='a': Zapis macierzowy ukladu równan M = ∑ ∑ x b y x ij , n i j k i kk k + = 0 k = 0 > > M:=Matrix(m+1):b:=Vector(m+1): > for i from 0 to m do b[i+1]:=add(Y[k]*X[k]^i,k=0..n): n + i 1, 1 ++ 1 for j from 0 to m do M[i+1,j+1]:=add(X[k]^(i+j),k=0..n): end do: end do: > M,b; 10 45 285 2025 45 285 2025 15333 285 2025 15333 120825 2025 15333 120825 978405 -219.8 -796.7 -2405.9 797.5 , > a:=LinearSolve(M,b); -1.17510489510479842 -2.75339937839944104 -5.09889277389276428 0.676068376068375664 > g2:=add(a[j+1]*x^j,j=0..m); # wielomian aproksymujący wyznaczony z układu równan A.a=b g2 1.175104895 2.75339937839944104 x 5.09889277389276428 x 2 a := := − − − + > 'g1'=g1; = 0.676068376068375664 x 3 g1 − 1.175104895 2.753399378 x 5.098892774 x 2 − − + 0.6760683761 x 3 > a:='a':b:='b': Komenda w Maple'u > with(CurveFitting); Warning, the name LeastSquares has been rebound [ BSpline BSplineCurve Interactive LeastSquares PolynomialInterpolation , , , , , RationalInterpolation Spline ThieleInterpolation , , ] > type(X,list); false > X:=convert(X,list); Y:=convert(Y,list); := X [ 0123456789 ] := Y [ -1.2 -8 -22.1 -37.6 -49.5 -58.7 -54.0 -39.3 -3.5 54.1 , , , , , , , , , ] > type(X,list); true > gM:=LeastSquares(X,Y,x,curve=add(a[i]*x^i,i=0..m)); gM 1.175104895 2.75339937839955874 x 5.09889277389273054 x 2 := − − − + > 'g2'=g2; g2 1.175104895 2.75339937839944104 x 5.09889277389276428 x 2 0.676068376068373222 x 3 = − − − + 0.676068376068375664 x 3 > Aproksymacja funkcji okresowej > f:=x->piecewise(x<-1,-2-x,x<1,x,2-x); ,,,,,,,,, f → x piecewise ( x -1 − − , 2 x < , x 1 x − , , 2 x ) > plot(f,-2..2,scaling=constrained); > fokr:=piecewise(x<-3,x+4,x<-1,-2-x,x<1,x,x<3,2-x,-4+x); # kilka okresow na wykresie x 4 x -3 − − 2 x < x -1 fokr := x x 1 < 2 x x 3 < 4 x otherwise > plot(fokr,x=-5..5,scaling=constrained); − + := < + < − T 2 2 2 π ix a = ∫ f x ( ) cos dx i , = 0,1,... i T T T − 2 T 2 2 2 ()sin π ix b = ∫ f x dx i , 1,2,. = i T T − T 2 > T:=4; T 4 := > m:=10; # 5, 10, 15, 25, 50 m 10 := > for i from 0 to m do a[i]:=2/T*evalf(Int(f(x)*cos(2*Pi/T*i*x),x=-T/2..T/2)): b[i]:=2/T*evalf(Int(f(x)*sin(2*Pi/T*i*x),x=-T/2..T/2)): end do: ∑ > g:=1/2*a[0]+add(a[i]*cos(2*Pi/T*i*x)+b[i]*sin(2*Pi/T*i*x),i=1..m ); m gx a a x b x () =+ 1 ( cos 2 π i + sin ) 2 π i 2 0 i T i T = 1 g 0.8105694690 := sin π x 2 − 0.09006327436 sin 3 π x 2 + 0.03242277876 sin 5 π x 2 − 0.01654223406 sin 7 π x 2 + 0.01000703048 sin 9 π x 2 − 0.1000000000 10 -13 sin 5 π x ( ) > plot([fokr,g],x=-5..5,color=[red,blue],scaling=constrained,numpo ints=200); # porównanie > > i |
Menu
|