Matlab联立隐函数H(x,y1)和M(x,y2)求解新函数C(y1,y2)和因变量x的关系

目录

1. 问题描述

2. 函数图像

2.1 隐函数H的图像

2.2 隐函数M的图像

3. 解决思路

3.1 初步思路

3.2 实际情况

3.3 解决方法

4. 完整代码

5. 交流讨论


1. 问题描述

已知条件如下:

①隐函数H(x,y1) = exp(2*x-y1)*log(x-3*y1)-4 = 0

②隐函数M(x,y2) = log(2*x-y2)/exp(x-2*y2)+3 = 0

现有函数y =  C(y1,y2) = exp(1-y1*y2),求y和x在坐标轴范围x∈[2,10],y∈[0,25]的函数图像


2. 函数图像

我们借助matlab的官方函数fimplicit绘制隐函数H和M的图像。

fimplicit函数接收两个参数,一个是匿名函数,一个是坐标轴范围。

2.1 隐函数H的图像

figure
H = @(x,y) exp(2*x-y)*log(x-3*y)-4;
bound = [2,10,0,25];
h = fimplicit(H, bound);
title('隐函数H')

2.2 隐函数M的图像

%% 绘制隐函数M
figure
M = @(x,y) log(2*x-y)/exp(x-2*y)+3;
bound = [2,10,0,25];
m = fimplicit(M, bound);
title('隐函数M')

 

3. 解决思路

3.1 初步思路

  1. 对于隐函数H(x1,y1)的图像,可以得到一组一一对应的向量x1和y1,同理对于隐函数M(x2,y2),也可以得到一组一一对应的向量x2和y2;
  2. 如果这里的x1和x2完美契合,即x1向量和x2向量完全一致,不妨用x来表示x1和x2,那么只需要将y1向量和y2向量代入函数表达式y =  C(y1,y2) = exp(1-y1*y2),计算得到y向量,利用plot(x, y)就可以得到目标函数图像。

3.2 实际情况

对于隐函数H,函数fimplicit不光绘制隐函数H在bound上的图像,还会返回该图像窗口,这里用h接收其返回的图像窗口

h = fimplicit(H, bound);

在工作区内查看该h变量,可以发现其有子属性XData和YData,分别对应图像上各点的横纵坐标。

 于是,利用fimplicit的返回值,可以得到隐函数H和M图像的x、y向量

%% 获取隐函数H的x1、y1向量
x1 = h.XData;
y1 = h.YData;
%% 获取隐函数M的x2、y2向量
x2 = m.XData;
y2 = m.YData;

遗憾的是,x1和x2并没有完全一致(完全一致的要求是x1和x2的长度首先需要一样,其次两个向量相减为0向量)。

3.3 解决方法

对于这种情况,我们可以考虑对H的图像进行插值,人为地选取向量x = [x1, x2, ..., xn],并得到与其对应的yp1;同理,同样使用向量x = [x1, x2, ..., xn]对M的图像进行插值,得到与其对应的yp2,这样就建立了x与yp1、x与yp2的映射关系。

%% 设置x的插值点,对y1和y2进行插值
x = 2:0.5:10;             %设置x的插值点
yp1 = interp1(x1, y1, x); %用x对y1重新插值得到yp1
yp2 = interp1(x2, y2, x); %用x对y2重新插值得到yp2

进一步地,通过y = C(y1,y2) = exp(1-y1*y2),可以得到x与y的映射关系,从而绘制目标图像。

%% 计算及绘图
y = exp(1-yp1.*yp2);
figure
plot(x, y), title('x和y的图像')

4. 完整代码

clear, close all
%% 绘制隐函数H
figure
H = @(x,y) exp(2*x-y)*log(x-3*y)-4;
bound = [2,10,0,25];
h = fimplicit(H, bound);
title('隐函数H')
%% 绘制隐函数M
figure
M = @(x,y) log(2*x-y)/exp(x-2*y)+3;
bound = [2,10,0,25];
m = fimplicit(M, bound);
title('隐函数M')
%% 获取隐函数H的x1、y1向量
x1 = h.XData;
y1 = h.YData;
%% 获取隐函数M的x2、y2向量
x2 = m.XData;
y2 = m.YData;
%% 设置x的插值点,对y1和y2进行插值
x = 2:0.5:10;             %设置x的插值点
yp1 = interp1(x1, y1, x); %用x对y1重新插值得到yp1
yp2 = interp1(x2, y2, x); %用x对y2重新插值得到yp2
%% 计算及绘图
y = exp(1-yp1.*yp2);
figure
plot(x, y), title('x和y的图像')

5. 交流讨论

要在MATLAB求解隐函数方程,可以使用fimplicit函数。这个函数接收两个参数,一个是匿名函数,表示隐函数方程,另一个是坐标轴范围。首先,定义隐函数方程H和M,例如H = @(x, y) exp(2*x-y)*log(x-3*y)-4和M = @(x, y) log(2*x-y)/exp(x-2*y)。然后,定义坐标轴范围bound,例如bound = [2, 10, 0, 25]。接下来,使用fimplicit函数绘制隐函数方程的图像,例如h = fimplicit(H, bound)和m = fimplicit(M, bound)。最后,可以为图像添加标题,例如title('隐函数H')和title('隐函数M')。这样就可以在MATLAB求解并绘制隐函数方程的图像了。引用中的代码示例可以帮助你更好地理解这个过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Matlab联立隐函数H(x,y1)和M(x,y2)求解函数C(y1,y2)和因变量x的关系](https://blog.csdn.net/qq_42276781/article/details/121193728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Matlab基础应用学习笔记.md](https://download.csdn.net/download/weixin_52057528/88284511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Toblerone_Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值