马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 weiniuzhu 于 2011-1-12 19:23 编辑
我最近在求解一个变参数微分方程系数识别的程序,从网上看了不少例子,本论坛关于变参数微分方程数值求解有几个例子,而关于我这方面的例子基本上没有,所以求助高手谢谢了
1 假设已知k=3;利用数值方法根据给出的x计算出y
首先先取k=3,利用数值方法生成变参数微分方程数值解,然后利用仿真解识别系数k。其中v为变参数,需要从外部输入。在这里我取v=1:length(x);
function dydt =modelnew(t,y,k,v)
%辅函数
global y0;
dydt =-k*(y-y0)*y.^2+v; function y=num_valuetest(k,x) global y0; v=1:length(x); yy=y0; fori=1:length(x)-1 [t y]=ode23s(@modelnew,[x(i)x(i+1)],y0,[] ,k,v(i)); y0=y(end,: ); yy=[yy;y0]; end y=yy; %ttyy=[x,yy] %save('ttyy.txt','ttyy','-ascii');%先生成数据另存为ttyy.txt
空间代码 clear all;%主程序 global y0; y0=0; x=[0 12 3 4 5 7 9 11 14 17 20 25 30 35 40 45 53 60 70 80 90 100 110 120 130 140 150]; y=num_valuetest(3,x);%k=3; ttyy=[x,y] %save('ttyy.txt','ttyy','-ascii');%先生成数据另存为ttyy.txt; 2 然后利用上面仿真得到的数据,识别参数k 开始编写参数识别程序
function odetest%主程序
clc;clear;
global y0
load ttyy.txt;
xdata=ttyy(:,1);ydata=ttyy(:,2);
k0=2.7;y0 =ydata(1);
options=optimset('TolFun',1e-20,'TolX',1e-20,'MaxFunEvals',100,'Algorithm','trust-region-reflective','Display','iter');
k=lsqcurvefit(@num_value,k0,xdata,ydata,[0],[10],options);
Jc=num_value(k,xdata);
plot(xdata,ydata,'o',xdata,Jc); functiondydt=modelsq(t,y,k,v)
global y0
dydt =-k*(y-y0)*y.^2+v;
function y=num_value(k,x)
global y0;
v=1:length(x); yy=y0;
for i=1:length(x)-1[ t y]=ode23s(@modelsq,[x(i) x(i+1)],y0,[] ,k,v(i));
y0=y(end,: );
yy=[yy;y0];
end
y=yy; 得出的结果为什么k一直是初始值呢,根本没有变化,而得不到准确值3 |