ode45不能解决我的二阶问题

2次查看(最近30天)
量子吞噬
量子吞噬 2020年8月9日
评论道: 量子吞噬2020年8月9日
大家好
我有一个二阶ode,我想解决这个方程(我需要说,我已经把我的代码附加到这篇文章的最后一节):
其中β^2为常数,且
其中n0 n2和都是常量,所有这些常量都可以在我的代码中找到。当我尝试用ode45解这个ode方程时,我得到一个警告:“警告:t=3.069827e+00时失败。”无法满足整合容忍度而不减少……”而我在图中的答案并没有显示出我需要得到的答案。这就是我想要的:
这是我的结果:
你可以通过运行我的代码来确定,如果你想的话。我怎样才能解决这个问题?我将感激任何帮助,并提前感谢您的时间。对于n(z)的其他形式,matlab可以准确地解出我想要的方程但这个很棘手,我不知道是怎么解的。这是我的代码,顺便说一下,如果你不能下载文件
作用例2
clc
清楚的
i1=[pi/10 0-pi/60-pi/30-pi/15-pi/10]
Xspan = [0 20];
z0=[0.5,tan(i1)];
持有在…上
[x,z]=ode45(@odefun,xspan,z0);
图(x,z(:,1))
xlabel(的范围(m)
伊拉贝尔(‘高度(米)’
网格在…上
轴([02002])
终止
作用dz=odefun(~,z)
一个= 2.303;
n2=0.45836;
n0=1.000233;
Np =√(n0 ^ 2 + (n2 ^ 2 * exp(-a * 0.5)));
B = np * cos(i1);
N =√(n0 ^ 2 + (n2 ^ 2 * exp(-a * z(1))));
dn_dz=-(a*n2^2*exp(-a*z(1))/(2*(n0^2+exp(-a*z(1))*n2^2)^(1/2));
dz = 0 (2, 1);
dz(1)=z(2);
dz(2)=(n)*(dn_dz)/(B^2);
终止
终止

公认的答案

艾伦·史蒂文斯
艾伦·史蒂文斯 2020年8月9日
编辑:艾伦·史蒂文斯 2020年8月9日
当z(1)为负值时,会出现警告。可以通过包括
如果z(1)<0
z (1) = 0;
终止
在odefun函数的开头。
你确定你的初始角度与文本中的情节相同吗?试试用这些角度
i1=[pi/13pi/15pi/200-pi/60-pi/30-pi/15-pi/10]
你应该得到
1评论
量子吞噬
量子吞噬 2020年8月9日
非常感谢我的朋友。绝对正确。
我认为你是对的,角度需要修改。

登录评论。

答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2020年8月9日
编辑:沃尔特·罗伯森 2020年8月9日
这和之前的问题完全一样。左手边包含z作为x的函数,但右手边包含z作为自变量,而不是x的函数。
你甚至可以给n(z)一个定义它不明显地涉及到x。
如果我们说"好的,z实际上是z(x)"那么 是函数的导数,在普通演算中无效(需要变分演算)
为了能求出n关于z的微分即使z是x的函数,那么你需要知道n是独立于z的,这是你无法知道的,因为z(x)是未知的。
然而……理论上是可以的 尝试 只要你把求出的z(x)回代进去,就可以检验你得到的导数是否与假设的导数一致。
信谊nn0n_2 z(x) z
N =根号(n_0^2 + n_2^2 * exp(- α *z(x)));
dndx =潜艇(diff(潜艇(n z z), z), z, z) * diff (z (x) x);
显示(n)
显示(dndx)
d2zdx=diff(z(x),x,x);
disp (d2zdx)
方程n=d2zdx==n/beta^2*dndx;
disp(eqn);
ZX = dsolve (eqn)
ZX=
对数(-n_2^2+exp(C1*alpha*(C2+x))/(2*C1*beta^2))/alpha
C1
z(x)金宝搏官方网站的两个解,一个是常数,另一个更有趣。
现在,我们可以使用你的代码中的边界条件,根据边界条件继续计算C1和C2的值吗?
好不,至少不容易。有n(0)=1/2的边界条件。为了用x来表达它,这样你可以找到z(x)的边界条件,你必须解z(x)==0才能找到x
Z0=解算(subs(n,z,ZX(1))==0,x);%这将警告使用k进行参数化
var = symvar (ZX);%C1,C2,α,β,n_2,x
C2=求解(子(n,z,Z0)=1/2,变量(2));
dZ0=简化(subs(subs(subs(dndx,z,ZX(1)),vars(2),C2),x,0));
C1=求解(dZ0==tan(Pi/10),变量(1))
然后我们就没动力了,这个方程太乱了,找不到C1常数。
“其中β^2为常数”
Np =√(n0 ^ 2 + (n2 ^ 2 * exp(-a * 0.5)));
B = np * cos(i1);
这在我看来不是一个常数。
1评论
量子吞噬
量子吞噬 2020年8月9日
谢谢你抽出时间来回答我的问题。你真是太好了。老实说,你在这些事情上很在行!然而,在我的问题中,n不是x的函数。在我前面的问题中,n是一个数据,但这里它是一个函数。
我完全知道你想指出什么,但在光学上事情并没有那么复杂,但在数学上,你是非常正确的。
老实说,这是一项我必须看到它完成的任务,就我个人而言,我仍然没有弄清楚这个等式的头绪,在这个等式上有更多的问题,甚至比你更多。
如果你发现这种材料很有趣,我请免除一本书我附在这评论“第3章,几何光学”(特别是39页,3.4节:射线方程及其解决方案),因为你比我在这种数学材料,你可以更好地理解它。金宝搏官方网站
如果您有任何关于光学背景的问题,我将为您服务,先生。

登录评论。

下载188bet金宝搏


释放

R2019b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!