odeFunction matlab,MATLAB 如何在function裡使用ode45輸出值

clear;

M=0.024;

a=1/1.5;

b=1;

alpha=0;

beta=0;

maxiter=100;

for i=1:3

C=1;

if i==1

C=C-10^-3;

elseif i==2

C=C+10^-3;

elseif i==3

C=C

end

aa=0

epsilon=1e-3;

x0=0;

h=(b-a)/maxiter

t0=a

s(1)=(beta-alpha)/(b-a);

t=zeros(maxiter+1,1);

t=a:h:b;

x1(1)=0

x2(1)=s(1)

z1(1)=0

z2(1)=1

for ii=1:maxiter

H=0.25;

m=1.2;

Y=x1(ii);

Y1=x2(ii);

tt=t(ii);

sigmay=((Y/tt)^2-Y*Y1/tt+(Y1)^2)^0.5;

if sigmay>1

aa=(sigmay.^m-1)/(H*sigmay)

elseif sigmay<=1

aa=0

end

f=@(t,x1,x2)x2  %f代表y

g=@(t,x1,x2)1/(t*(1+aa))*C+1/(t.^2)*x1-1/t.*x2  %g代表y'

F=@(t,z1,z2)z2;%F代表z

G=@(t,z1,z2)1/(t.^2)*z1-1/t*z2;%G代表z'

f0=x1(ii);

g0=x2(ii);

F0=z1(ii);

G0=z2(ii);

f1=f(t0,f0,g0)

g1=g(t0,f0,g0)

F1=F(t0,F0,G0)

G1=G(t0,F0,G0)

f2=f(t0+h/2,f0+h/2*f1,g0+h/2*g1)

g2=g(t0+h/2,f0+h/2*f1,g0+h/2*g1)

F2=F(t0+h/2,F0+h/2*F1,G0+h/2*G1)

G2=G(t0+h/2,F0+h/2*F1,G0+h/2*G1)

f3=f(t0+h/2,f0+h/2*f2,g0+h/2*g2)

g3=g(t0+h/2,f0+h/2*f2,g0+h/2*g2)

F3=F(t0+h/2,F0+h/2*F2,G0+h/2*G2)

G3=G(t0+h/2,F0+h/2*F2,G0+h/2*G2)

f4=f(t0+h,f0+h*f3,g0+h*g3)

g4=g(t0+h,f0+h*f3,g0+h*g3)

F4=F(t0+h,F0+h*F3,G0+h*G3)

G4=G(t0+h,F0+h*F3,G0+h*G3)

x1(ii+1)=x1(ii)+h/6*(f1+2*f2+2*f3+f4)

x2(ii+1)=x2(ii)+h/6*(g1+2*g2+2*g3+g4)    %龙格库塔法迭代

z1(ii+1)=z1(ii)+h/6*(F1+2*F2+2*F3+F4)

z2(ii+1)=z2(ii)+h/6*(G1+2*G2+2*G3+G4)

end

% iterations:

%

flag=0;

n=length(x1(1,:));

diff=abs(x1(1,n)-beta);

if diff

flag=1;

end

k=1;

while flag==0,

s(k+1)=s(k)+(beta-x1(1,n))/z1(1,n);

clear t;

clear x1;

clear x2;

x1(1)=0

x2(1)=s(k+1)

z1(1)=0

z2(1)=1

t=zeros(maxiter+1,1);

t=a:h:b;

for ii=1:maxiter

H=0.25;

m=1.2;

Y=x1(ii);

Y1=x2(ii);

tt=t(ii);

sigmay=((Y/tt)^2-Y*Y1/tt+(Y1)^2)^0.5;

if sigmay>1

aa=(sigmay.^m-1)/(H*sigmay)

elseif sigmay<=1

aa=0

end

f=@(t,x1,x2)x2  %f代表y

g=@(t,x1,x2)1/(t*(1+aa))*C+1/(t.^2)*x1-1/t.*x2  %g代表y'

F=@(t,z1,z2)z2;

G=@(t,z1,z2)1/(t.^2)*z1-1/t*z2;

f0=x1(ii);

g0=x2(ii);

F0=z1(ii);

G0=z2(ii);

f1=f(t0,f0,g0)

g1=g(t0,f0,g0)

F1=F(t0,F0,G0)

G1=G(t0,F0,G0)

f2=f(t0+h/2,f0+h/2*f1,g0+h/2*g1)

g2=g(t0+h/2,f0+h/2*f1,g0+h/2*g1)

F2=F(t0+h/2,F0+h/2*F1,G0+h/2*G1)

G2=G(t0+h/2,F0+h/2*F1,G0+h/2*G1)

f3=f(t0+h/2,f0+h/2*f2,g0+h/2*g2)

g3=g(t0+h/2,f0+h/2*f2,g0+h/2*g2)

F3=F(t0+h/2,F0+h/2*F2,G0+h/2*G2)

G3=G(t0+h/2,F0+h/2*F2,G0+h/2*G2)

f4=f(t0+h,f0+h*f3,g0+h*g3)

g4=g(t0+h,f0+h*f3,g0+h*g3)

F4=F(t0+h,F0+h*F3,G0+h*G3)

G4=G(t0+h,F0+h*F3,G0+h*G3)

x1(ii+1)=x1(ii)+h/6*(f1+2*f2+2*f3+f4)

x2(ii+1)=x2(ii)+h/6*(g1+2*g2+2*g3+g4)    %龙格库塔法迭代

z1(ii+1)=z1(ii)+h/6*(F1+2*F2+2*F3+F4)

z2(ii+1)=z2(ii)+h/6*(G1+2*G2+2*G3+G4)

end

n=length(x1(1,:));

diff=abs(x1(1,n)-beta);

if diff

flag=1;

end

k=k+1;

end

n=length(x1(1,:));

for iii =1:n

cc(1,iii)=x2(1,iii).*t(1,iii);

end

ff(i)=trapz(t,cc)+M;

end

while abs(ff(3))>0.001

CC=C-2*10^-3*ff(3)/(ff(2)-ff(1));

for i=1:3

if i==1

C=CC-10^-3;

elseif i==2

C=CC+10^-3;

elseif i==3

C=CC;

end

for ii=1:maxiter

H=0.25;

m=1.2;

Y=x1(ii);

Y1=x2(ii);

tt=t(ii);

sigmay=((Y/tt)^2-Y*Y1/tt+(Y1)^2)^0.5;

if sigmay>1

aa=(sigmay.^m-1)/(H*sigmay)

elseif sigmay<=1

aa=0

end

f=@(t,x1,x2)x2  %f代表y

g=@(t,x1,x2)1/(t*(1+aa))*C+1/(t.^2)*x1-1/t.*x2  %g代表y'

F=@(t,z1,z2)z2;

G=@(t,z1,z2)1/(t.^2)*z1-1/t*z2;

f0=x1(ii);

g0=x2(ii);

F0=z1(ii);

G0=z2(ii);

f1=f(t0,f0,g0)

g1=g(t0,f0,g0)

F1=F(t0,F0,G0)

G1=G(t0,F0,G0)

f2=f(t0+h/2,f0+h/2*f1,g0+h/2*g1)

g2=g(t0+h/2,f0+h/2*f1,g0+h/2*g1)

F2=F(t0+h/2,F0+h/2*F1,G0+h/2*G1)

G2=G(t0+h/2,F0+h/2*F1,G0+h/2*G1)

f3=f(t0+h/2,f0+h/2*f2,g0+h/2*g2)

g3=g(t0+h/2,f0+h/2*f2,g0+h/2*g2)

F3=F(t0+h/2,F0+h/2*F2,G0+h/2*G2)

G3=G(t0+h/2,F0+h/2*F2,G0+h/2*G2)

f4=f(t0+h,f0+h*f3,g0+h*g3)

g4=g(t0+h,f0+h*f3,g0+h*g3)

F4=F(t0+h,F0+h*F3,G0+h*G3)

G4=G(t0+h,F0+h*F3,G0+h*G3)

x1(ii+1)=x1(ii)+h/6*(f1+2*f2+2*f3+f4)

x2(ii+1)=x2(ii)+h/6*(g1+2*g2+2*g3+g4)    %龙格库塔法迭代

z1(ii+1)=z1(ii)+h/6*(F1+2*F2+2*F3+F4)

z2(ii+1)=z2(ii)+h/6*(G1+2*G2+2*G3+G4)

end

% iterations:

%

flag=0;

n=length(x1(1,:));

diff=abs(x1(1,n)-beta);

if diff

flag=1;

end

k=1;

while flag==0,

s(k+1)=s(k)+(beta-x1(1,n))/z1(1,n);

clear t;

clear x1;

clear x2;

x1(1)=0

x2(1)=s(k+1)

z1(1)=0

z2(1)=1

t=zeros(maxiter+1,1);

t=a:h:b;

for ii=1:maxiter

H=0.25;

m=1.2;

Y=x1(ii);

Y1=x2(ii);

tt=t(ii);

sigmay=((Y/tt)^2-Y*Y1/tt+(Y1)^2)^0.5;

if sigmay>1

aa=(sigmay.^m-1)/(H*sigmay)

elseif sigmay<=1

aa=0

end

f=@(t,x1,x2)x2  %f代表y

g=@(t,x1,x2)1/(t*(1+aa))*C+1/(t.^2)*x1-1/t.*x2  %g代表y'

F=@(t,z1,z2)z2;

G=@(t,z1,z2)1/(t.^2)*z1-1/t*z2;

f0=x1(ii);

g0=x2(ii);

F0=z1(ii);

G0=z2(ii);

f1=f(t0,f0,g0)

g1=g(t0,f0,g0)

F1=F(t0,F0,G0)

G1=G(t0,F0,G0)

f2=f(t0+h/2,f0+h/2*f1,g0+h/2*g1)

g2=g(t0+h/2,f0+h/2*f1,g0+h/2*g1)

F2=F(t0+h/2,F0+h/2*F1,G0+h/2*G1)

G2=G(t0+h/2,F0+h/2*F1,G0+h/2*G1)

f3=f(t0+h/2,f0+h/2*f2,g0+h/2*g2)

g3=g(t0+h/2,f0+h/2*f2,g0+h/2*g2)

F3=F(t0+h/2,F0+h/2*F2,G0+h/2*G2)

G3=G(t0+h/2,F0+h/2*F2,G0+h/2*G2)

f4=f(t0+h,f0+h*f3,g0+h*g3)

g4=g(t0+h,f0+h*f3,g0+h*g3)

F4=F(t0+h,F0+h*F3,G0+h*G3)

G4=G(t0+h,F0+h*F3,G0+h*G3)

x1(ii+1)=x1(ii)+h/6*(f1+2*f2+2*f3+f4)

x2(ii+1)=x2(ii)+h/6*(g1+2*g2+2*g3+g4)    %龙格库塔法迭代

z1(ii+1)=z1(ii)+h/6*(F1+2*F2+2*F3+F4)

z2(ii+1)=z2(ii)+h/6*(G1+2*G2+2*G3+G4)

end

n=length(x1(1,:));

diff=abs(x1(1,n)-beta);

if diff

flag=1;

end

k=k+1;

end

n=length(x1(1,:));

for iiii =1:n

cc(1,iiii)=x2(1,iiii).*t(1,iiii);

end

ff(i)=trapz(t,cc)+M;

end

end

for iiiii=1:n

T(1,iiiii)=x1(1,iiiii)/t(1,iiiii);

end

plot(t/a,T,t/a,x2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值