⑴ 急求MATLAB编程源代码用四阶龙格库塔法解如下微分方程 y'=y-2x/y(0<x<1),y(0)=1,步长为h=0.2
%以下另存为文件myrk4.m
function[x,y]=myrk4(ufunc,y0,h,a,b)
%参数:函数名称,初始值向量,步长,时间起点,时间终点
n=floor((b-a)/h);%求步数
x(1)=a;%时间起点
y(:,1)=y0;%赋初值
%按龙格库塔方法进行求解
forii=1:n
x(ii+1)=x(ii)+h;
k1=ufunc(x(ii),y(:,ii));
k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);
k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);
k4=ufunc(x(ii)+h,y(:,ii)+h*k3);
y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;
end
以下是主程序
%y'=y-2x/y(0<x<1),y(0)=1,步长为h=0.2
fun=inline('y-2*x/y');
[t1,f1]=myrk4(fun,1,0.2,0,1);%测试时改变test_fun的函数维数,别忘记改变初始值的维数
subplot(211);plot(t1,f1)%自编函数
title('自编函数求解结果')
%用系统自带函数ode45进行比较
[t,f]=ode45(fun,[01],1);
subplot(212);plot(t,f);title('ode45求解结果')
⑵ matlab这个代码怎么写
使用matlab计算该递推数列,需要要符号计算symbolic toolbox以提高计算精度,从而实现数值方法。对于精度,取|pₙ₊₁-pₙ|<ε为迭代终止条件,计算过程为:依次计算aₙ,bₙ,cₙ,sₙ,pₙ,并检查|pₙ-pₙ₋₁|<ε,一符合即结束循环,代码如下:
digits(30);
ab0=[sym(1) ,sym(1/2)^0.5 sym(0)];
r=@(x)(x(1:end-1));
n=@(x)(x(end));
abab=@(t)([mean(r(t)) prod(r(t))^0.5 n(t)+1]);
ab1=abab(ab0);
c=@(t)(sum((r(t).^2).*[1 -1]));
s0=sym([1]);
ss=@(t,x)(t-c(x).*2*2^n(x));
s1=ss(s0,ab1);
ee=sym(10e-19);
p=@(ab,s)(sum(r(ab)).^2/4/s);
p0=p(ab0,s0);
p1=p(ab1,s1);
pold=1000;
while abs(pold-p1)>=ee;
fprintf('p(%d)=',n(ab1));
disp(vpa(p1,29));
ab1=abab(ab1);
s1=ss(s1,ab1);
pold=p1;
p1=p(ab1,s1);
end;
结果如上
⑶ 求MATLAB代码
我只能说,这种限定行数的东西很疼。
再说句不好听的,多一些空行,代码一行拆成两行写,多一些注释,再牛一点把一些MATLAB自带的函数用循环再实现一次,这样的话,几百行的代码肯定可以干到1200行。