Mathematica 隐函数方程组 求解 画图

有两个方程,第一个方程含有(x y)第二个方程含有(x y z)利用findroot可以画出方程一中(x y)的图像,如何画出(x z)的图像呢

或者如何把一个table中的点集代入到另一个方程中,形成新的table

img

参考GPT和自己的思路,对于含有(x y)和(x y z)的两个方程,如果想要求解隐函数方程组并绘制(x z)图像,可以使用以下步骤:

1.定义方程组:
假设第一个方程为f[x,y]==0,第二个方程为g[x,y,z]==0。在Mathematica中,可以通过定义一个函数来表示方程组:

eqns[x_, y_, z_] := {f[x, y] == 0, g[x, y, z] == 0}

2.使用FindRoot解出隐函数方程组:
使用FindRoot可以求解方程组,例如:

sol = FindRoot[eqns[x, y, z], {{x, x0}, {y, y0}, {z, z0}}]

3.其中,x0、y0和z0是初始值,sol是求解的结果。

提取(x,z)坐标点:
由于我们只需要绘制(x,z)图像,因此可以将(x,y)坐标固定,仅提取(x,z)坐标点。例如,假设我们想要将y=1时的(x,z)坐标点提取出来,可以使用以下代码:

points = Table[{x, z /. sol}, {x, xmin, xmax, dx}]

其中,xmin、xmax和dx是(x,z)坐标轴的范围和步长。

4.绘制图像:
最后,使用ListPlot绘制点集即可:

ListPlot[points, PlotRange -> {{xmin, xmax}, {zmin, zmax}}]

这样就可以绘制出隐函数方程组的(x,z)图像了。

另外,如果要将一个table中的点集代入到另一个方程中,可以使用Map或Table函数。例如,假设我们有一个包含(x,y)坐标点的点集data,我们想要将这些点代入到方程f[x,y,z]中,可以使用以下代码:

result = Table[f[data[[i,1]],data[[i,2]],z],{i,1,Length[data]}]

其中,data[[i,1]]和data[[i,2]]分别表示点集中第i个点的x和y坐标,result是代入后的结果。

该回答引用ChatGPT

如有疑问,可以回复我!

运行结果

img

实现代码

% 创建一组x值
x_values = linspace(-3, 3, 1000);

% 计算方程一的y值
y_values1 = sqrt(4 - x_values.^2);
y_values2 = -sqrt(4 - x_values.^2);

% 绘制方程一的(x, y)图像
figure;
plot(x_values, y_values1, 'b', x_values, y_values2, 'b');
xlabel('x');
ylabel('y');
title('方程一: x^2 + y^2 - 4 = 0');

% 计算方程二的z值
% 注意:可能有多个z值与一个(x, y)点相关,因此需要先选定一个y值,然后计算相应的z值
chosen_y = 1; % 选择一个y值
z_values = -(3 * x_values.^2 + chosen_y^2) / 4;

% 绘制方程二的(x, z)图像
figure;
plot(x_values, z_values);
xlabel('x');
ylabel('z');
title(['方程二 (y = ' num2str(chosen_y) '): 3x^2 + y^2 + 4z = 0']);


对于第一个问题,如果要使用 FindRoot 求解多元方程,可以将多元方程转化为一个单元方程,例如可以将第二个方程中的 z 表达式代入到第一个方程中,从而得到一个只含有 (x, y) 的单元方程。

例如,如果方程组为:

f1(x, y) = x + y - 1 = 0
f2(x, y, z) = x^2 + y^2 + z^2 - 4 = 0

可以将 z 表达式代入到 f1 中,得到一个只含有 (x, y) 的单元方程:

f(x, y) = f1(x, y, z=f2(x, y, z=0)) = x + y - 1 + (x^2 + y^2 - 3) = 0

然后可以使用 FindRoot 求解这个单元方程,并将其绘制成 (x, z) 的图像。

对于第二个问题,可以使用 Table 和 Map 函数将一张表中的点集代入到另一个方程中,从而得到一个新的表。

例如,如果有一个表示 (x, y) 坐标的表 table1,和一个只含有 x 的方程 f(x),可以将 table1 中的每个点 (x, y) 代入到 f(x) 中,得到一个新的表 table2:

table1 = Table[{x, y}, {x, 0, 1, 0.1}, {y, 0, 1, 0.1}]
f[x_] := x^2
table2 = Map[{#[[1]], f[#[[1]]]} &, table1, {2}]

这里使用了 Map 函数,将 table1 中的每个点 (x, y) 代入到 f(x) 中,得到一个新的表 table2,其中每个元素的第一个值是 x,第二个值是 f(x)。
如有帮助,还请帮忙点个赞呗 !