24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 4917  |  回复: 12

匿名

用户注销 (小有名气)

本帖仅楼主可见
已阅   同方向广播   申请计算强帖   回复此楼   编辑   查看我的主页
回帖支持 ( 显示支持度最高的前 50 名 )

xcenxcen

银虫 (小有名气)

【答案】应助回帖


fegg7502: 金币+1, 应助指数+1, 鼓励交流 2014-05-13 09:17:07
function [y err] = soodesv(q1,q2,q3,alpha,beta,a,b,dx)
N = (b-a)/dx+1;
y = zeros(N,1);
D = zeros(N);
f = zeros(N,1);
for ir=1:N
    x = a+(ir-1)*dx;
    if ir==1
        D(ir,ir) = -q2(x)-2.0/(dx^2);
        D(ir,ir+1) = 2.0/(dx^2);
        f(ir) = 2.0*alpha/dx+q1(x)*alpha+q3(x);
    end
    if ir>1 && ir<N
        D(ir,ir) = -2.0/(dx^2)-q2(x);
        D(ir,ir+1) = 1.0/(dx^2)-q1(x)/(2.0*dx);
        D(ir,ir-1) = 1.0/(dx^2)+q1(x)/(2.0*dx);
        f(ir) = q3(x);
    end
    if ir==N
        D(ir,ir) = -q2(x)-2.0/(dx^2);
        D(ir,ir-1) = 2.0/(dx^2);
        f(ir) = q1(x)*beta+q3(x)-2.0*beta/dx;
    end
end
y = D\f;
t = a:dx:b;
err = norm(D*y-f);
fprintf('2rd order ode solver error: ||D*y-f||_{2}=%e\n',norm(D*y-f));
plot(t,y);

例子:
y''-3.0*y'+2.0*y-x=0 y'(0)=1 y'(1)=2
>>soodesv(@(x)3.0,@(x)(-2.0),@(x)x,1,2,0,1,0.01);
有限差分法 第二类边界条件
解的图像.jpg


有限差分法 第二类边界条件-1
结果.jpg

待我长发及腰,遮住一身肥膘。纵然虎背熊腰,也要高冷傲娇。
6楼2014-05-12 10:16:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
fegg7502: 金币+3, 应助指数+1, 专家考核, 3ks 2014-05-13 09:16:37
这个可以考虑用bvp解算器做
BVP解算器
solinit = bvpinit(x, yinit, params)
sol = bvpsolver(odefun,bcfun,solinit,options)
由于边值问题可能有多解,为了便于我们确定那个解是我们需要的,所以必须使用bvpinit函数对初值进行估计
解算器(bvpsolver):Matlab中提供了bvp4c和bvp5c,后者误差控制更好些
输入参数:
x:需要计算的网格点,相当于ode**的tspan
yinit:猜测的值,可以是具体值,也可以是函数,类似与 ode**的 x0
params:其它未知参数,也是一个猜测值
odefun:描述边值问题微分方程的函数句柄

bcfun:边值函数,一般是双边值(x 的上下限即认为两个边界),但也支持多边值(具体看帮助)
bc(y(a),y(b))=0
举个例子,y(0)=0,y(4)=-2 ---bcfun可写成 res =@(ya,yb) [ ya(1) ; yb(1) + 2];
y'(0)=y'(pi)=0,y(0)=1-----------bcfun可写成res = @(ya,yb) [  ya(2); yb(2);ya(1)-1 ];
solinit:由bvpinit生成的初始化网格
solinit = bvpinit(linspace(pa,pb,10),[1 0]);
bvpinit的第一个参数表示求解域及中心节点,第二个参数表示猜测初始值,基本都写成[1 0],它的变化一般对解无影响
options:BVP解算器优化参数,可以通过bvpset设置,具体参数查看帮助

降阶法表达二阶的常微分方程,ya(1)表示函数在求解域[a,b]的左边界a上的值,ya(2)表示函数的一阶导数在a上的值,“ya(1)-5”实际上是“ya(1)-5=0”的简写,表示y(x=a)=5,即函数在左边界上的值为5。yb是右边界,其他与ya相同。
用bvp4c求得的解sol是一个结构体,其中的子项y是一个2行多列的矩阵,第一行表示函数值,第二行表示函数的导数。另一个子项yp也是一个2行多列的矩阵,第一行表示函数一阶导数值,第二行表示函数二阶导数值。用deval求出的y与sol.y相同
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2014-05-09 19:47:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
3楼2014-05-09 21:24:53
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
478107371: 金币+60, ★★★★★最佳答案, 大神,请接受我的膝盖,分全是你一人儿的 2014-05-10 00:11:25
fegg7502: 金币+2, 应助指数+1, 专家考核, 3ks 2014-05-13 09:16:54
举个例子吧
y''-3y'+2y=x, y‘(0)=1,y’(1)=2
CODE:
%解析解
yy=dsolve('D2y-3*Dy+2*y=x','Dy(0)=1','Dy(1)=2','x');
x=0:0.01:1;hold on;plot(x,eval(yy),'bo')
%bvp 数值解
f1=@(x,y)[y(2);x-2*y(1)+3*y(2)];
solinit = bvpinit(linspace(0,1,20),[-1 1]);
f2=@(ya,yb)[ya(2)-1;yb(2)-2];
sol = bvp4c(f1,f2,solinit);
xint = linspace(0,1,25);
yint = deval(sol,xint);
hold on; plot(xint,yint(1,:),'rp-');

The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
4楼2014-05-09 21:51:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
5楼2014-05-10 01:25:56
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

匿名

用户注销 (小有名气)

本帖仅楼主可见
7楼2014-05-12 10:39:14
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

xcenxcen

银虫 (小有名气)


fegg7502: 金币+1, 鼓励交流 2014-05-13 09:17:18
引用回帖:
7楼: Originally posted by 478107371 at 2014-05-12 10:39:14
大神,你这个是用什么方法写的代码,能不能稍微解释一下子...

内部网格用的二阶中心差分
(y(j+1)-2*y(j)+y(j-1))/(dx^2)-q1j*(y(j+1)-y(j-1))/(2*dx)-q2j*yj-q3=0
j=1,....,N-1
边界条件用的二阶中心差分,引入虚网格点
左边边界条件y1-y(-1))/(2.0*dx)=alpha
y(-1)=y1-2*alpha*dx
利用方程
(y(1)-2*y(0)+y(-1))/(dx^2)-q10*alpha-q20*y0-q3=0
把y(-1)带入到上式
每个网格点都有一个方程
然后形成一个(N+1)×(N+1)的方程组
Dy=f
解出来就完了
待我长发及腰,遮住一身肥膘。纵然虎背熊腰,也要高冷傲娇。
8楼2014-05-12 12:49:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

本帖仅楼主可见
9楼2014-05-12 19:05:12
已阅   申请计算强帖   回复此楼   编辑   查看我的主页

xcenxcen

银虫 (小有名气)

【答案】应助回帖


fegg7502: 金币+1, 应助指数+1, 3ks 2014-05-13 09:17:28
引用回帖:
9楼: Originally posted by 478107371 at 2014-05-12 19:05:12
边界条件也是二阶差分吗,是不是一阶差分?另外迭代过程呢?思路是不是用有限差分将二阶方程变成线性方程组,然后用的牛顿迭代法求解?...

边界条件也可以用二阶的差分啊,当然你也可以用一阶的。
这是个线性方程组吧,直接消元就可以解了。你这个方程规模也不大,还是一维的问题。
真要迭代可以考虑用Jacobi迭代什么的。
牛顿迭代法不是解非线性方程的吗?
待我长发及腰,遮住一身肥膘。纵然虎背熊腰,也要高冷傲娇。
10楼2014-05-13 08:31:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 478107371 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085600材料与化工301分求调剂院校 +14 刺痛jk 2026-04-06 15/750 2026-04-06 11:57 by lijunpoly
[考研] 070300化学学硕311分求调剂 +11 梁富贵险中求 2026-04-04 11/550 2026-04-06 10:43 by 蓝云思雨
[考研] 调剂 一志愿吉林大学357分 +5 .Starry. 2026-04-04 5/250 2026-04-06 09:28 by cql1109
[考研] 302分 085601求调剂推荐 +11 zyx上岸! 2026-04-05 11/550 2026-04-05 22:13 by dongzh2009
[考研] 277求调剂 +5 考研调剂lxh 2026-04-05 5/250 2026-04-05 19:03 by chy09050039
[考研] 288求调剂 一志愿哈工大 材料与化工 +13 洛神哥哥 2026-04-03 13/650 2026-04-05 17:27 by zzx2138
[考研] 282求调剂 +7 aaa车辆 2026-04-02 11/550 2026-04-05 17:24 by yulian1987
[考研] 工科求调剂 +15 11ggg 2026-04-03 15/750 2026-04-05 16:24 by zzx2138
[考研] 材料工程310专硕调剂 +13 捞捞我…. 2026-04-04 14/700 2026-04-05 09:01 by 来看流星雨10
[考研] 材料调剂 +12 一样YWY 2026-04-04 12/600 2026-04-05 08:24 by 544594351
[考博] 申博 +7 IQwQl 2026-04-04 7/350 2026-04-04 23:32 by mumin1990
[考研] 材料调剂 +12 一样YWY 2026-04-02 13/650 2026-04-04 20:49 by 蓝云思雨
[考研] 282求调剂 +20 ycy1201 2026-04-01 22/1100 2026-04-04 00:42 by userper
[考研] 315求调剂 +6 顺理成张 2026-04-03 8/400 2026-04-03 14:04 by 百灵童888
[考研] 286求调剂 +7 Faune 2026-03-30 7/350 2026-04-03 10:14 by linyelide
[考研] 一志愿厦门大学材料工程专硕354找调剂!!! +8 贝呗钡钡 2026-03-30 8/400 2026-04-03 09:41 by hypershenger
[考研] 重庆大学材料与化工085600,初试370+,求求调剂建议 +8 shzhou_ 2026-04-01 9/450 2026-04-03 09:31 by 蓝云思雨
[考研] 材料专硕322分 +11 哈哈哈吼吼吼哈 2026-04-01 11/550 2026-04-02 10:52 by lnilvy
[考研] 求调剂:一志愿:南京大学 专业:0705 总分320 ,本科985,四六级已过 +3 lfy760306 2026-03-31 3/150 2026-04-01 01:57 by Creta
[考研] 370求调剂 +3 080700调剂 2026-03-30 3/150 2026-03-31 01:09 by A_Zhe
信息提示
请填处理意见