
如何用matlab求解带积分的二元方程组?分析题主给出的求解代码存在着下列几个方面的问题:
问题一,由于给出的被积函数含有未知变量x1、x2,所以用integral函数不能求其积分值,而出现出错警告;
解决思路,设置未知变量x1、x2分别为某具体值,然后再用integral函数求其积分值。
问题二,在这里使用 vpasolve函数求解变量x1、x2不是太恰当;由于方程里含有不完整的积分式,所以用 vpasolve函数无法得到解。
解决思路,使用fsolve函数求解其方程的数值解。
解决步骤:
1、创建求解带积分的二元方程组函数,f =func(x)。其内容:
f1=@(t)exp(-(1-x2)t)/t; %定义方程
f2=@(t)exp(-x1t)/t; %定义方程
S1=integral(f1,1,+inf); %求积分值
S2=integral(f2,1,+inf); %求积分值
f = [x1-S1,x2-(1- S2)]; %
2、用fsolve函数求解。即
sol = fsolve(@func,rand(1,2));
x1=sol(1) %x1的解
x2=sol(2) %x2的解
3、完善代码后运行可以得到
x1 = 052761
x2 = 047239
要将电路的状态方程写入Matlab程序并产生数据,需要按照以下步骤进行 *** 作:
1 确定电路的状态方程:电路的状态方程描述了电路中各个元件的状态随时间变化的关系,通常是一组微分方程。根据电路的拓扑结构和元件特性,可以推导出电路的状态方程。
2 将状态方程转化为矩阵形式:将状态方程转化为矩阵形式,可以方便地在Matlab中进行计算。通常需要用到矩阵运算和微分方程求解方法。
3 编写Matlab程序:根据状态方程和矩阵形式,编写Matlab程序来求解电路的状态随时间的变化。程序中需要包括对初始条件的设定、微分方程求解方法的选择、时间步长的设置等。
4 运行程序并可视化数据:运行Matlab程序,得到电路状态随时间的变化数据。可以将数据可视化,比如绘制电路各个节点的电压随时间的变化曲线,来更直观地观察电路的动态响应。
总之,将电路的状态方程写入Matlab程序并产生数据需要深入了解电路的拓扑结构和元件特性,掌握矩阵运算和微分方程求解方法,以及熟悉Matlab编程技巧。
MATLAB上重积分的计算方法综述
MATLAB中采用数值方法计算重积分,我所知范围内有以下资源可用:
1、对于积分上下限为固定值的情况,可以使用dblquad和triplequad函数;
2、对于积分上下限不是固定值的情况(即所谓一般区域的重积分),有以下几种方法:
最笨的做法是所谓的拓展函数法,也就是把被积函数乘上一个与积分限有关的逻辑表达式,然后调用dblquad或triplequad。这种做法效率很低,误差大,而且对于复杂积分区域的逻辑表达式也比较难写,所以很少用。
从2009a开始,增加了对一般区域二重积分的计算函数quad2d,但没有一般区域三重积分的计算函数。
第三方NIT工具箱有二重积分的quad2dggen函数。
从2012a开始,增加了integral、integral2和integral3函数。这几个函数比起早期的quad系列函数有不少改进,比如支持瑕积分以及任意区域的重积分,如果使用的是2012a之后的版本,建议使用这组函数。我猜测这几个函数应该也可以移植到早期的版本上使用,但没试。
如果使用的MATLAB版本较低(但至少应在70以上),可以使用SimWe仿真科技论坛rocwoods 版主提出的方法,该方法主要使用匿名函数以及arrayfun两种工具,受到不少人的推崇,还出版了一本相关的书(当然,只是部分内容)。我这里使用的就是这种方法。
借助于符号数学工具箱的int函数,即使不能求出显式解,多数情况下也能使用vpa得到足够精度的结果,但耗时往往较长(具体情况与符号运算内核有关)。
实例
1、三重积分
>> a=1;b=2;>> quadl(@(xx) arrayfun(@(x) quadl(@(yy) arrayfun(@(y) quadl(@(z) a(8-b)^2/((x-1)^2+y^2+z^2)^2,15,sqrt(2405-y^2-(x-1)^2)),yy),-sqrt(0156-(x-1)^2),sqrt(0156-(x-1)^2)),xx),1,1394968)
ans =
00405
2、二重积分
>> a=1;b=2;>> quadl(@(xx) arrayfun(@(x) quadl(@(y) a(8-b)^2/((x-1)^2+y^2+(x^2+y^2)^2)^3,x^2-2,x^3-1),xx),1,4)
ans =
17039
说明
1、不太清晰,有些符号看不太清楚(尤其是积分限),请自行认真核实。
2、第一题的三重积分,我把积分上限原来的1395进行微调,改为1394968,这是因为,如果按照1395计算,则y的积分限根号下的内容可能取值
>> 0156-(1395-1)^2ans =
-25000e-005
从而导致结果出现复数。
3、关于我使用的方法,要说清楚需要花点时间。度娘不让贴链接,如果想详细了解,你可以自行搜索一下“一般区域二重、三重积分MATLAB计算方法”相关的内容。我上传的附件是该论坛另一位高手bainhome 把相关内容做成PDF文件,可供参考。不过,我觉得如果花点时间看看论坛原帖的讨论,可能有更大收获。
4、我使用符号的习惯与rocwoods原作略有区别。
代码就是昨天写的那样:
syms x3n=x3^2;
t1=1+2i;
J=int(n,x3,t1,x3)
得到的结果是
J =1/3x3^3+11/3+2/3i
这个结果是很容易检验的:因为x^2的不定积分是1/3x^3,现在,把积分上限x3代入,即可得到上式中的第一项1/3x3^3,而把积分下限代入则得到后面两项(注意负号):
>> -1/3(t1)^3ans =
366666666666667 + 0666666666666667i
这里因为t1直接用数值量而非符号量,所以显示出来的是浮点数的形式。
我没有自己看你的程序,不过通过图可以看得清楚啊,实际输出用‘o’表示,预测的用‘+’表示。第一个图估计是初始化,也就是第一步,预测还没有开始,还是相等的点。而下图表示,已经预测结束,与实际基本吻合。
以上就是关于带积分的二元方程组,未知数在积分中,能用matlab程序求解吗全部的内容,包括:带积分的二元方程组,未知数在积分中,能用matlab程序求解吗、如何将电路的状态方程写入matlab程序产生数据、求助大神,这样的积分如何积(a,b根据不同值求出来的中间值),用matlab编写程序,或者c++都可以等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)