matlab ode 定步长怎么计算以12为步长的差分

查看: 4564|回复: 8|关注: 0
matlab如何进行反差分运算
<h1 style="color:#4 麦片财富积分
入门, 积分 144, 距离下一级还需 356 积分
关注者: 20
如何进行反差分运算:
&& x=[1 2 5 7 8 12 15 20]'
&& x2=diff(x,2)%二阶差分
如何用反运算,通过x2求的x?
[ 本帖最后由 edifiers2008 于
14:12 编辑 ]
<h1 style="color:#9 麦片财富积分
关注者: 27
不行的吧,连个不同的线条,差分结果可以是相同的,以此而推,是不行的。
1 提问请直接在论坛中发帖,不要发站内消息给我。
2 不要在QQ中问我提问,这样很浪费时间
<h1 style="color:#4 麦片财富积分
关注者: 20
可以的,设定初值就行:我只会计算一阶的。如下:
&& s=[10;12;13;15;18;23;30]
&& x=diff(s)
&& x=[s(1);x]
&& cumsum(x)
<h1 style="color:#9 麦片财富积分
关注者: 4
这其实是一个inverse model, 是一大类的问题.
线性的问题一般是可逆的,但是非线性的绝大多数是不可逆的, 例如y = x ^ 2, 由x=1 可以得出y = 1, 但是给出y=1时, 你不知道x是1还是-1.
这个时候, 一般会设定一些限制条件, 比如x&0, 你的解就会是唯一的.
<h1 style="color:#4 麦片财富积分
关注者: 20
我的问题没有这么复杂,我的问题是有一列向量,进行n阶差分后;
如果已知n阶差分,和原向量的前n个值,如何求得原向量。Matlab有没有通用的函数?
<h1 style="color:#9 麦片财富积分
关注者: 4
as you did, if you give some boundary condition, you can get it. If you do not have the condition, you can not get the original sequence.
I am not sure whether Matlab has any function to do exactly what you want.
<h1 style="color:#0 麦片财富积分
关注者: 2
一阶的会算,二阶的就相当于计算二次一阶的
计算一次差分就丢掉一个初值的信息 反算的时候就要补上一次
如果在计算差分的时候在前面补上0(一阶的补一个,二阶的补二个。。。)
那么反算的时候就直接cumsum(cumsum(...))就行了
<h1 style="color:# 麦片财富积分
cumsum(cumsum(...))&&这样好像算出来的结果不对
<h1 style="color:# 麦片财富积分
差分运算是下面矩阵运算的结果
(diag(ones(1,n),1)-Eye(n+1))xdiff(x)
x的系数矩阵(记作A)是n*n+1的
因此A不存在逆
而当补充初值条件
[1 0 0 0...0]x=x(1)
记作Bx=x(1)
这个系数矩阵是满秩矩阵,因此解唯一
[B& && && &[x(1)
A]& &*x=diff(x)]
是有唯一解的
而要多次求解,则需要多次添加初值条件
当然这里的初值可以是任意一个位置的值,不一定是(x1)
站长推荐 /2
Powered by查看: 3890|回复: 5|关注: 0
急求Matlab如何用中心差分格式计算两点边值问题
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
题目在附件里,麻烦各位了,学习中
<h1 style="color:# 麦片财富积分
附件中第一个应该是U''
<h1 style="color:# 麦片财富积分
第一个式子第一段& &-u''(x)
<h1 style="color:# 麦片财富积分
<h1 style="color:# 麦片财富积分
ding:Q :Q :Q :Q
<h1 style="color:# 麦片财富积分
关注者: 1
求数值解还是解析解?
所给初值条件不够啊。
站长推荐 /2
Powered bymainc 的BLOG
用户名:mainc
访问量:301
注册日期:
阅读量:5863
阅读量:12276
阅读量:330714
阅读量:1037594
51CTO推荐博文
对流方程的有限差分数值解法(步长定律、固有差分格式、matlab程序和输出图形)&
1& 一维对流方程
1.1& 一维对流方程的形式:&&&&&&
&&&&&&&&& &&&&&& &&&&
其中,u代表物质的量,a代表物质的运动速度。此一维对流方程仅仅表示物质的运动情况,而与边界条件或是约束条件无关。当a为常数时,此一维对流方程为一维常系数对流方程,当a不为常数时,方程为一维变系数对流方程。在不考虑边界条件或约束条件的情况下,无论a是否为常数,此对流方程本身的数值解法存在固有的有限差分格式,条件是要满足步长定律。
1.2& 一维常系数对流方程的步长定律:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& &&&&&&& &
其中 &#8710;t 为时间步长,&#8710;x 为空间步长。
1.3& 一维常系数对流方程的固有差分格式:&&
&&&&& &&&&&&&&&&&&&&&&
&&&&&& 或者&&
&&&&&&&&&&&&&&&&&&
1.4&&有以下方程:
&&&&&&&&&&&&&&&&&
满足初始条件:
x=1:1:113,
u0=[0& 0& 1.& &3.&& 7.&& 1.&& 2.&& 4.&& 7.& &0.9&&&0.0028&& 0.0042&& 0.0059&& 0.0080&& 0.0104 & 0.0132&& 0.0161&& 0.0189&& 0.0215&& 0.0235& &0.0248&& 0.0253&& 0.5&&&0.0215&&&0.0189&& 0.0161&& 0.0132& &0.0104&& 0.0080&& 0.0059& &0.0042&& 0.0028&& 0.0019& &0.0012&& 7.&& 4..&& 1.& 7.&& 3.&& 1.&& 0&& 0&& 0&& 0&& 0& &0&& 0&& 0& &0&& 0 & 0& &0&& 0&& 0&& 0&& 0&& 0& 0&& 0&& 0&&&& 0& &0& &0&& 0&& 0&& 0& &0&& 0& &0&& 0&& 0&& 0&& 0& &0& &0&& 0&&&0&& 0&& 0& &0&& 0& &0&& 0& &0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0&& 0& &0&& 0&& 0&& 0&& 0& &0&& 0& &0&& 0& &0&& 0&& 0&& 0],
和边界条件:
u(1,t)=u(113,t)=0.
MATLAB程序:
u0 = [0 0 1........0012 ...
&&& &&0.8 0.9 0.4 0.1 0.5 ...
&&&&& 0.8 0.8 0.5 0.1 0.4 ...
&&&&& 0.9 0.8 0.2 7.... ...
&&&&& 7... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
&&&&& 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
&&&&& 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ];
u=zeros(3,113);
for i=1:113
&&& u(1,i)=u0(i);
for n=1:68
&&& u0(113)=0;
&&& for i=112:-1:2
&&&&&&& u0(i)=u0(i-1);
&&& u0(1)=0;
&&& if n==34
&&&&&& for i=1:113
&&&&&&&&&& u(2,i)=u0(i);
&&&&&& end
&&& if n==68
&&&&&& for i=1:113
&&&&&&&&&& u(3,i)=u0(i);
&&&&&& end
n = 1:1:113;
plot(n,u(1,n),'-o');
plot(n,u(2,n),'-o');
plot(n,u(3,n),'-o');
输出图形:&&&&&&&&&&&&
&& 本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:未分类┆阅读(0)┆评论(0)
10:41:37 10:00:08科学运算问题的Matlab求解_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
科学运算问题的Matlab求解
上传于||文档简介
&&常&#8203;见&#8203;科&#8203;学&#8203;运&#8203;算&#8203;M&#8203;a&#8203;t&#8203;l&#8203;a&#8203;b&#8203;举&#8203;例
大小:4.74MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢在matlab中如何编写差分方程以及如何给定输入
潜水有爱9wu
e(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif =kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endSOR迭代法的Matlab程序 function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b)); % 赋初值tol=10^(-2); % 给定误差界N=1000; % 给定最大迭代次数[n,n]=size(A); % 确定矩阵A的阶w=1; % 给定松弛因子k=1;% while k=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);endif max(abs(x-x0))=tolfid = fopen('SOR_iter_result.txt','wt');fprintf(fid,'\n\n\n');fprintf(fid,'迭代次数:%d次\n\n',k);fprintf(fid,'超过最大迭代次数,');fclose(fid);end Matlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法.由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂.该算法是构建在数学支持的基础之上的.龙格库塔方法的理论基础来源于泰勒公式和使用斜率近似表达微分,它在积分区间多预计算出几个点的斜率,然后进行加权平均,用做下一点的依据,从而构造出了精度更高的数值积分计算方法.如果预先求两个点的斜率就是二阶龙格库塔法,如果预先取四个点就是四阶龙格库塔法.一阶常微分方程可以写作:y'=f(x,y),使用差分概念.(Yn+1-Yn)/h= f(Xn,Yn)推出(近似等于,极限为Yn')Yn+1=Yn+h*f(Xn,Yn)另外根据微分中值定理,存在0t1,使得Yn+1=Yn+h*f(Xn+th,Y(Xn+th))这里K=f(Xn+th,Y(Xn+th))称为平均斜率,龙格库塔方法就是求得K的一种算法.利用这样的原理,经过复杂的数学推导(过于繁琐省略),可以得出截断误差为O(h^5)的四阶龙格库塔公式:K1=f(Xn,Yn);K2=f(Xn+h/2,Yn+(h/2)*K1);K3=f(Xn+h/2,Yn+(h/2)*K2);K4=f(Xn+h,Yn+h*K3);Yn+1=Yn+h*(K1+2K2+2K3+K4)*(1/6);所以,为了更好更准确地把握时间关系,应自己在理解龙格库塔原理的基础上,编写定步长的龙格库塔函数,经过学习其原理,已经完成了一维的龙格库塔函数.仔细思考之后,发现其实如果是需要解多个微分方程组,可以想象成多个微分方程并行进行求解,时间,步长都是共同的,首先把预定的初始值给每个微分方程的第一步,然后每走一步,对多个微分方程共同求解.想通之后发现,整个过程其实很直观,只是不停的逼近计算罢了.编写的定步长的龙格库塔计算函数:function [x,y]=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)n=floor((b-a)/h);%求步数x(1)=a;%时间起点y(:,1)=y0;%赋初值,可以是向量,但是要注意维数for ii=1:nx(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调用的子函数以及其调用语句:function dy=test_fun(x,y)dy = zeros(3,1);%初始化列向量dy(1) = y(2) * y(3);dy(2) = -y(1) + y(3);dy(3) = -0.51 * y(1) * y(2);对该微分方程组用ode45和自编的龙格库塔函数进行比较,调用如下:[T,F] = ode45(@test_fun,[0 15],[1 1 3]);subplot(121)plot(T,F)%Matlab自带的ode45函数效果title('ode45函数效果')[T1,F1]=runge_kutta1(@test_fun,[1 1 3],0.25,0,15);%测试时改变test_fun的函数维数,别忘记改变初始值的维数subplot(122)plot(T1,F1)%自编的龙格库塔函数效果title('自编的 龙格库塔函数')
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 matlab步长设置 的文章

 

随机推荐