求解一道隐函数求积分的问题,较为复杂,求大神帮忙!
mathematica吧
全部回复
仅看楼主
level 2
flx2135097 楼主
此题目是导师布置的,我前期使用matlab求解未成功,转而使用mma,无奈仓促接触之间有很多问题不明白,而时间较为紧迫只好向各位大神求助。
因为公式形式较为复杂, 我将编出来的部分程序代码贴出来,没有编出来的部分就直接贴图片了,见谅!
图片按顺序分别是 要最终求解的积分Cp,隐函数1、2、3,代码1、2、3结果,最终拟达到的结果。
目的:
主要目的是求解积分Cp,最终获得Cp关于自变量λ的数值解以及绘制的曲线图。
问题详述:
积分方程中出现了4个变量Ceff、Xe、β、X(独立变量),以及还有1个未在式中出现的变量λ(独立变量)。它们之间有如下关系:
1. Ceff(因变量)与λ(自变量)之间的关系通过隐函数一表示(容易使用mma求解此隐式并绘制曲线,代码见代码1)式中0.6为离散的常数变量;
2. Xe(因变量)与Ceff、λ之间的关系通过隐函数二表示(与隐函数一联立可以求得Xe关于λ的数值解,并绘制曲线,代码见代码2);
3. β(因变量)与λ(自变量1)、X(自变量2)组成了隐函数三(X与λ均为独立变量),代码见代码3。
三个隐函数单独求解并绘制图像的话还不是太麻烦,可是在mma中如何将这三个函数联立,或者如何调用前一步的结果,最终获取Cp关于λ的关系呢?如果各位大神感觉做起来有点麻烦的话,还请指点一下学习方向,目前一头雾水中。。。
代码中的λ就是公式截图里的λT。
代码1:
Show@Table[
ContourPlot[ceff-((c+1/3*(Sign[1-ceff]*2.566*(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))*(Abs[1-ceff])^(8/5))*t^(-1)+2*3.1415926*(Sign[1-ceff]*0.0225*(1+(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))^2)^(3/8)*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))^(-0.25)*(Abs[1-ceff])^(8/5))*0.267*t^(-1))/(1+1/3*(Sign[1-ceff]*2.566*(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))*Abs[1-ceff]^(8/5))*t^(-1)))==0,{t,0,0.5},{ceff,0,1}],{c, -0.4,0.9, 0.1}]
其中c是常数,后边联立的时候取c为0.6。
代码2:
ContourPlot[ceff-((0.6+1/3*(Sign[1-ceff]*2.566*(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))*(Abs[1-ceff])^(8/5))*\[Lambda]^(-1)+2*3.1415926*(Sign[1-ceff]*0.0225*(1+(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))^2)^(3/8)*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))^(-0.25)*(Abs[1-ceff])^(8/5))*0.267*\[Lambda]^(-1))/(1+1/3*(Sign[1-ceff]*2.566*(0.162*(1+8*ceff)^(0.5)*(1-0.229*ceff)^(-0.5))*(0.526*(1-0.019*ceff)^(0.3)*(1-0.229*ceff)^(0.1)*(1+8*ceff)^(-0.4)*(1+1.608*ceff)^(-0.8))*Abs[1-ceff]^(8/5))*\[Lambda]^(-1)))==0,{\[Lambda],0,0.5},{ceff,0,1}][[1,1]]/.{\[Lambda]_,ceff_}:>{\[Lambda],Solve[xe-(ceff-2.22\[Lambda]^0.625*xe^(3/8))^0.5==0,xe][[1,1,2]]}//ListPlot
(这也是我想问的一个问题,就是隐含数组联立的时候,我只能将此常数变量先赋一个值,然后画出曲线,能否像单一隐函数作图一样,给c赋一组值,直接画出一组曲线来?)
代码3:
ContourPlot3D[\[Beta]-1-(30/(49*3.14159*(0.162*(1+8*\[Beta])^(0.5)*(1-0.229*\[Beta])^(-0.5))*(0.526*(1-0.019*\[Beta])^(0.3)*(1-0.229*\[Beta])^(0.1)*(1+8*\[Beta])^(-0.4)*(1+1.608*\[Beta])^(-0.8))))^(5/8)*\[Lambda]^(5/8)*x^(-13/8)==0,{\[Lambda],0,0.5},{x,0,1},{\[Beta],0,10}]
a0=0.162*(1+8*\[Beta])^(0.5)*(1-0.229*\[Beta])^(-0.5)
r0=0.526*(1-0.019*\[Beta])^(0.3)*(1-0.229*\[Beta])^(0.1)*(1+8*\[Beta])^(-0.4)*(1+1.608*\[Beta])^(-0.8)
2018年01月28日 09点01分 1
吧务
level 15
……代码没细读,但我怎么感觉你该会的都会了。Table也会,连从图上挖点都会……你还有哪方面有困难呢?如果是不知道怎么把构成图的点弄成函数的话,看看Interpolation的帮助。
2018年02月03日 08点02分 2
补充一句。直接从图上挖的点可能会有精度不太高的问题,可能会需要用FindRoot之类的函数去重算一遍,不过如果对最终结果要求没那么高的话直接用也行。
2018年02月03日 08点02分
1