uk702 发表于 2023-3-29 13:39:44

方程组求解。

神奇的 MMA,我是崇拜得不行不行的,

求解方程组:\[\begin{cases}
\dfrac{a}{x}+\dfrac{1}{2 \sqrt{x+1}}=\dfrac{1}{4 a \sqrt{x}}\\
\\
a \ln(x) + \sqrt{x+1} = \dfrac{\sqrt{x}}{2 a}
\end{cases}\]请问谁能读懂它的心思?
MMA 参考代码:Solve[{a/x + 1/(2 Sqrt) == 1/(4 a Sqrt),
a Log + Sqrt == Sqrt/(2 a)}, {x, a}, Reals]

nyy 发表于 2023-3-29 13:53:11

先画等值线图,确定根的大致范围,然后用牛顿迭代法求数值解!这位我会,我不止一次这么干过

nyy 发表于 2023-3-29 14:16:30

Clear["Global`*"];(*删除所有变量*)
(*定义两个函数*)
f=a/x+1/(2*Sqrt)-1/(4*a*Sqrt)
g=a*Log+Sqrt-Sqrt/(2*a)
(*绘制等值线图,看等值线的交点,交点作为牛顿迭代法的初始值*)
ContourPlot[{f==0,g==0},{x,-1,20},{a,-5,5},PlotPoints->100]
(*牛顿迭代法求解三个根,初始值从函数图像的交点上附近找*)
FindRoot[{f==0,g==0},{{x,0.1},{a,0.1}},WorkingPrecision->20]
FindRoot[{f==0,g==0},{{x,1},{a,1}},WorkingPrecision->20]
FindRoot[{f==0,g==0},{{x,8},{a,-2}},WorkingPrecision->20]


图片我就不给你传了,给郭先强节省一点点空间

求解结果
{x -> 0.0071216611120466503644, a -> 0.14348645390183962374}

{x -> 1.0000000000000000000, a -> 0.35355339059327376220}

{x -> 8.8100183080568324651, a -> -1.8152027137781061088}

nyy 发表于 2023-3-29 16:16:58

软件能求解的时候,你觉得不难,当软件求解不出来的时候,你就会觉得难,我是把方法告诉你,或者说我告诉你的是一种方法!

uk702 发表于 2023-3-29 16:50:48

本帖最后由 uk702 于 2023-3-29 16:59 编辑

nyy 发表于 2023-3-29 16:16
软件能求解的时候,你觉得不难,当软件求解不出来的时候,你就会觉得难,我是把方法告诉你,或者说我告诉你 ...

首先感谢你提供的方法。

不好意思,我没说清楚。我开这个帖子,主要是这两个诉求:
1)MMA 是怎么对第一个例子求“形式解/解析解”的,特别是它怎么找到 {x=1, a=1/(2√2)} 的,应该不会是象我们一样蒙的吧?对我来说,对这个方程进行理论求解实在太神奇了,如果不是先进行数值解再假意转化为理论解,它的能力实在太过逆天了。

2)对第一个例子,为什么 Solve 能找到“形式解”,而 NSolve 却不能给出数值解(其实是“假装”不能)?NSolve 不就是用来求数值解的吗?下面的例2,不是已经说明了 NSolve 也能做数值解。

好像有个说法,能让 MMA 进入调试状态(或者叫“跟踪”状态),这时 MMA 会将它的解题过程分成几个步骤显示出来,不知是否真能打开这个开关。

其实就是希望如果谁了解 MMA 如何进行理论求解,能够解答一下。

nyy 发表于 2023-3-31 15:08:49

听说过破解吗?你可以学破解,里面都是汇编,你可以跟着程序一步一步走,然后你就知道软件如何思考的,不过非常烦人
页: [1]
查看完整版本: 方程组求解。