栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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. 交流讨论

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509804.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号