A. 計算方法中的拉格朗日插值的Matlab實踐
Matlab中沒有現成的拉格朗日插值函數,必須編寫一個M文件實現拉格朗日插值。
設n個節點數據以數組x0, y0輸入(注意Matlab的數組下標從1開始),m 個插值點以數
組x輸入,輸出數組y 為m 個插值。
編寫一個名為lagrange.m的M文件:
function y=lagrange(x0,y0,x);
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0.0;
for k=1:n
p=1.0;
for j=1:n
if j~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
B. 怎樣用matlab進行公式計算
例如,求x=1,3,6,4,9,7時,函數y=2*x^3+4*x^2+6*x+7得函數值。matlab命令如下:
syms x y
x=[1,3,6,4,9,7];
y=2.*x.^3+4.*x.^2+6.*x+7
次命令可以輸出x值對應的函數值,這里主要用到.*和.^,這兩種運算表示向量或者矩陣中對應元素之間相乘或者平方
C. 請問如下公式的計算如何用matlab實現
題主的提供公式的計算,可以用matlab的for循環語句來實現。
Xit=[。。。]; %n個數據
Xjt=[。。。]; %m個數據
for i=1:n
for j=1:m
syms k
Xi=Xit(i),Xj=Xjt(j)
Div=symsum(abs(Xi^k/Xi-Xj^k/Xj),1,19)
end
end
註:題主你的公式的下標似乎一樣,請確認。
D. matlab中批量循環計算的實現方法
在matlab中執行循環迭代的方法:
a是一個由nk個數組成的數組
對應的y也應該是由nk個數組成的數組
a=某數組;
b=某常數;
d=某常數;
for k=1:1:nk
c=1;
n=0;
errf=1;
while errf>1e-8&n<100%計算結果精度要求1e-8,如果迭代超過100次還不收斂,退出循環。
y(k)=a(k)*b*c;
c1=y*d;
errf=(c1-c)/c1;
c=c1;
n=n+1;
end
E. matlab實現歐拉法和RK-4方法的數值計算
程序已經寫了,不過步長你得自己調,當步長較小時,計算時間會很長
另外,tend是時間的終值,你可以設小一些。因為解析解為10*cos(x),我設成pi,就是計算半個周期。
x''(t)=-x(t)
引入y1=x,y2=x',則
y1'=y2
y2'=-x=-y1
初始條件為:
y1(0)=10;
y2(0)=0;
將下面兩行百分號之間的內容,保存成DiffEulerRk4.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function MaxDiffX=DiffEulerRk4(dt,PlotFlag)
%dt是步長
%PlotFlag是否作圖
if nargin<1
dt=0.01;
end
if nargin<2
PlotFlag=0;
end
f=inline('[y(2);-y(1)]','t','y'); %微分方程的右邊項
t0=0; %初始時刻
tend=pi; %計算的點數
tt=t0:dt:tend; %一系列離散的點
N=length(tt); %點數
y0=[10;0];
%%(1)歐拉法
EulerY=y0;
for i=2:N
EulerY(:,i)=EulerY(:,i-1)+dt*f(tt(i-1),EulerY(:,i-1));
end
EulerX=EulerY(1,:); %取x
%%(2)龍格庫塔法
RkY=y0;
for i=2:N
k1=f(tt(i-1), RkY(:,i-1));
k2=f(tt(i-1)+dt/2, RkY(:,i-1)+k1*dt/2);
k3=f(tt(i-1)+dt/2, RkY(:,i-1)+k2*dt/2);
k4=f(tt(i-1)+dt, RkY(:,i-1)+k3*dt);
RkY(:,i)=RkY(:,i-1)+(k1+2*k2+2*k3+k4)*dt/6;
end
RkX=RkY(1,:); %取x
%精確解
syms t
analytic=dsolve('D2x=-x','x(0)=10','Dx(0)=0','t');
rightdata=subs(analytic,t,tt);
if PlotFlag
plot(tt,EulerX,'b-',tt,RkX,'r--',tt,rightdata,'g-.')
legend('Euler','Runge-Kutta','analytic')
end
MaxDiffX=[max(abs(RkX-rightdata)),max(abs(EulerX-rightdata))];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
所有題,都得你自己調步長。
輸入:
DiffEulerRk4(0.01,1) %步長取0.01的計算結果,參數為1代表作圖,自己得修改步長
%%下面是變化
Error=[];
Dt=[5e-4,1e-3,2e-3,5e-3,0.01,0.05,0.1];
for dt=Dt %幾種步長,自行修改
dt %查看dt,步長小,計算量大
Error_1=DiffEulerRk4(dt); %不作圖
Error=[Error;Error_1]; %保存歐拉法誤差
end
semilogx(Dt,Error)
legend('Euler','RK4')
xlabel('步長')
ylabel('誤差')
title('與理論值誤差')
F. 如何用Matlab進行多項式除法運算
1、滑鼠右擊打開桌面上的matlab程序,如下圖所示,matlab運行需要一定的時間,不要著急。
G. 如何用matlab程序進行運算
首先你要明白以下幾點:
1、.m文件是一個程序計算過程,還是一個function。
2、裡面有哪些變數與你的數據有關。
知道上邊的兩個,就按部就班的修改一下,就能用了。
如果是個計算過程,直接運行就能用,在這之前,要確保變數名都一致,如果不一致,可以修改一下。
如果是個函數,要調用。調用參數也要正確。
希望對你有幫助~~