求助,一个二元一次方程,对一个变量输入一连串值,求对应各解
mathematica吧
全部回复
仅看楼主
level 4
N=(9.40387∗0.06414∗p^0.68974)/(1+0.06414∗p^0.68974 )
我需要求解的方程如上,我想要的效果是我已知N的值是大于0小于或等于3.17
我想要得到N为0到3.17若干均匀分布的数值(20个左右就行)对应的p值
我的思路是把N定义为一个表,然后得到的p也是一个表,但是我对mathematica实在太陌生了,有没有知道怎么操作的人物指点一下
2020年06月29日 05点06分 1
level 4
N = {0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.60,
0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95, 1.00, 1.05, 1.10, 1.15,
1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.65, 1.70,
1.75, 1.80, 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20, 2.25,
2.30, 2.35, 2.40, 2.45, 2.50, 2.55, 2.60, 2.65, 2.70, 2.75, 2.80,
2.85, 2.90, 2.95, 3.00, 3.05, 3.10, 3.15}
NSolve[{N == (9.40387*0.06414*p^0.68974) (1 +
0.06414*p*0.68974)}, {p}]
2020年06月29日 06点06分 2
level 4
代码见上一楼,我觉得,我的编程思路就是错的,请各位大神指教
2020年06月29日 06点06分 3
level 9
Table[Solve[n == (9.40387*0.06414*p^0.68974)/(1 + 0.06414 *p^0.68974),
p],
{n, 0, 3.17, 3.17/20}]
终于有题我会的了[勉强]
2020年06月29日 06点06分 4
谢谢指点,麻烦看下六楼,我照你的代码可以得到一连串的p值,但是我们需要知道的n值没有输出来。
2020年06月29日 07点06分
@抗日北洋水师 类似坐标的那种?{n,p}这样?
2020年06月29日 07点06分
@0笑叹浮生若梦0 嗯嗯,对,我想得到这样的结果
2020年06月29日 07点06分
level 7
多说一句,mathematica里尽量不要拿大写字母定义变量,比如N,这是个系统自带函数的名称。
2020年06月29日 07点06分 5
谢谢指点
2020年06月29日 07点06分
level 4
@0笑叹浮生若梦0
我照你的代码试了试,能输出一串p的值,但我们无法找到与之一一对应的输入的n值
2020年06月29日 07点06分 6
level 9
那就用这个
Table[{n,
p /. Flatten@
Solve[n == (9.40387*0.06414*p^0.68974)/(1 + 0.06414*p^0.68974),
p]}, {n, 0, 3.17, 3.17/20}]
2020年06月29日 08点06分 7
这操作太溜了,能不能再帮我看看8楼更深入的问题,我想得到一个n对应两个方程的解,得到(n,p1,p2)的形式。谢谢
2020年06月29日 09点06分
level 4
我发现,我需要作到的是,控制同一个变量n,使两个方程相等。
例子是:n == (9.40387*0.06414*p1^0.68974)/(1 + 0.06414*p1^0.68974)==(4.98903*0.04155*p2^0.80321)/(1 + 0.04155*p2^0.80321)
我试着按照楼上大神的方法,能得到我需要的若干个n对应的p1、p2的值@0笑叹浮生若梦0
Clear[n, p1, p2]
Table[{n,
p1 /. Flatten@
Solve[n == (9.40387*0.06414*p1^0.68974)/(1 + 0.06414*p1^0.68974),
p1]}, {n, 0, 3.17, 3.17/20}]
Table[{n,
p2 /. Flatten@
Solve[n == (4.98903*0.04155*p2^0.80321)/(1 + 0.04155*p2^0.80321),
p2]}, {n, 0, 3.17, 3.17/20}]
照此方法,得到的两组数的n都是一样的,的确是我想要的效果。
有没有什么办法,让n、p1、p2三个数显示得更加密切一点能在一个括号里显示呢?
我试着瞎编数据:
Clear[n, p1, p2]
Table[{n, p1,
p2 /. Flatten@
Solve[n == (9.40387*0.06414*p1^0.68974)/(1 +
0.06414*p1^0.68974) == (4.98903*0.04155*p2^0.80321)/(1 +
0.04155*p2^0.80321), {p1, p2}]}, {n, 0, 3.17, 3.17/20}]
结果中,只有p2的值出现了,p1,还是p1
2020年06月29日 09点06分 8
叫你不准确的描述你的问题[阴险]
2020年06月29日 09点06分
@0笑叹浮生若梦0 我一开始想得是有办法得到n和p1对应的值就应该很好进一步操作了[泪]
2020年06月29日 10点06分
@抗日北洋水师 emm,你这么想也没错。但是MMA是函数式编程。照猫画虎的难度稍大一点
2020年06月29日 10点06分
level 9
为什么p1没数据,因为这个表格里面人家p1本来就没有被任何式子赋值
Table[{n,
p1 /. Flatten@
Solve[n == (9.40387*0.06414*p1^0.68974)/(1 + 0.06414*p1^0.68974),
p1],p2 /. Flatten@
Solve[n == (4.98903*0.04155*p2^0.80321)/(1 + 0.04155*p2^0.80321),
p2]}, {n, 0, 3.17, 3.17/20}]
这种方法存在一个问题:就是如果方程组存在多个解的话生成的列表长度不固定(或者直接报错?)
不过看样子你这个方程仅有唯一解
如果担心这一问题的话可以考虑使用First选择第一个解:
Table[{n,
p1 /. Flatten@
First@Solve[
n == (9.40387*0.06414*p1^0.68974)/(1 + 0.06414*p1^0.68974), p1],
p2 /. Flatten@
First@Solve[
n == (4.98903*0.04155*p2^0.80321)/(1 + 0.04155*p2^0.80321),
p2]}, {n, 0, 3.17, 3.17/20}]
2020年06月29日 10点06分 9
太感谢了,作为mathematica新手,顿时感觉有高手给我输入内力
2020年06月29日 10点06分
能帮我看看11楼的问题吗,我需要输入一个更复杂的公式带入计算的时候,遇到一写问题。
2020年08月19日 02点08分
吧务
level 15
……你不先用ContourPlot画画图再说吗?
2020年07月04日 03点07分 10
我需要得出n与两个公式中p的解,然后带入另一个公式计算
2020年08月19日 01点08分
level 4
@0笑叹浮生若梦0
大哥,麻烦再帮我看一个问题
我想试着带入稍微复杂一些的公式求解两个p值
n = ((5.97958*0.11764*p1^0.31638)/(1 +
0.11764*p1^0.31638) + (5.97958*0.11765*p1^0.31629)/(1 +
0.11765*p1^0.31629))
n = ((4.62168*0.27959*p2^0.33664)/(1 +
0.27959*p2^0.33664) + (4.62168*0.27959*p2^0.33662)/(1 +
0.27959*p2^0.33662))
输入代码如下:
Table[{n,
p1 /. Flatten@
Solve[n == ((5.97958*0.11764*p1^0.31638)/(1 +
0.11764*p1^0.31638) + (5.97958*0.11765*p1^0.31629)/(1 +
0.11765*p1^0.31629)), p1],
p2 /. Flatten@
Solve[n == ((4.62168*0.27959*p2^0.33664)/(1 +
0.27959*p2^0.33664) + (4.62168*0.27959*p2^0.33662)/(1 +
0.27959*p2^0.33662)), p2]}, {n, 0, 4.0, 4.0/30}]
直接按enter+shift无法运行,在软件操作界面运行后,软件始终停留在如下所示的状态,一直在running
我觉得,是代码存在漏洞,还是电脑运算有问题。
当我用带入没有那么复杂的公式的时候,运行很正常:
Table[{n,
p1 /. Flatten@
Solve[n == (5.97958*0.11764*p1^0.31638)/(1 + 0.11764*p1^0.31638),
p1], p2 /.
Flatten@Solve[
n == (4.62168*0.27959*p2^0.33664)/(1 + 0.27959*p2^0.33664),
p2]}, {n, 0, 2.0, 2.0/30}]
2020年08月19日 02点08分 11
方程太复杂了,Solve需要大量的时间计算
2020年08月19日 04点08分
@0笑叹浮生若梦0 能隐约感觉到电脑运算的轰鸣声,我多等等。
2020年08月20日 05点08分
@抗日北洋水师 我觉得你是不是换个算法,我试过单纯计算1== (5.97958*0.11764*p1^0.31638)/(1 + 0.11764*p1^0.31638)这个式子都算了几分钟还没出结果(当然可能是我电脑性能不够
2020年08月20日 07点08分
@0笑叹浮生若梦0 计算涉及到的是实验数据拟合的langmuir freundlich吸附方程,每个数字都是有物理意义的。算法呢,我就真不知道怎么简化了。
2020年08月20日 08点08分
level 7
为什么没人告诉楼主这个题从一开始就应该用FindRoot呢
Table[FindRoot[{n
==((5.97958*0.11764*p1^0.31638)/(1+0.11764*p1^0.31638)+(5.97958*0.11765*p1^0.31629)/(1+0.11765*p1^0.31629))
==((4.62168*0.27959*p2^0.33664)/(1+0.27959*p2^0.33664)+(4.62168*0.27959*p2^0.33662)/(1+0.27959*p2^0.33662))
==h},{{n,h},{p1,0},{p2,0}}],{h,0,3.17,3.17/20}]
2020年08月20日 13点08分 12
h的范围好像写错了,不过改一下就行了
2020年08月20日 13点08分
太感谢你的指点了,这么运算running一下几秒钟能算好
2020年08月20日 15点08分
我其实在 10 楼提示了,或许我说得太拐弯抹角了吧。
2020年09月05日 04点09分
@xzcyr 我需要的不是画图,需要的是方程解做其他的计算。有很多功能应该都能用mathematica完成,但是学起来太没有我当前会用的其他软件省事
2020年09月05日 08点09分
1