matlab:涉及复杂函数图像的交点求解

matlab:涉及复杂函数图像的交点求解

在MATLAB中求解两个图像的交点是一个常见的需求。本文将通过一个示例,展示如何求解两个图像的交点,并提供相应的MATLAB代码。

画出图像

首先,我们需要绘制两个图像,以便直观地看到它们的交点。以下是绘制图像的MATLAB代码:

% 定义符号变量
syms x1 x2;

% 上边界方程
eq1 = 10 + 110 * (0.8 + 0.05 + 0.4 * sin(4 * atan2(x2, x1))^16)^2 - (x1 + x2) == 0;

% 绘制图形
figure;

% 使用 fimplicit 绘制上边界
fimplicit(@(x1, x2) 10 + 110 * (b + 0.05 + 0.4 * sin(4 * atan2(x2, x1))^16)^2 - (x1 + x2), [0, 100, 0, 100]);
hold on;

% 使用 fimplicit 绘制 y = 100 - x1
fimplicit(@(x1, x2) x1 + x2 - 100, [0, 100, 0, 100]);

% 设置图例和标题
legend('Upper Boundary', 'y = 100 - x1');
title('Plot of Equations');
xlabel('x1');
ylabel('x2');
hold off;

绘制的图像如下所示:
在这里插入图片描述
从图中可以看出,存在四个实数域交点。

求解交点方法1:solve不加求解范围(失败)

首先尝试使用solve函数来求解交点:

% 定义符号变量
syms x1 x2;

% 定义参数
b = 0.8;
l = atan2(x2, x1);

% 定义方程组
eq1 = 10 + 110 * (b + 0.05 + 0.4 * sin(4 * l)^16)^2 - (x1 + x2);
eq2 = x1 + x2 - 100;

% 解方程组
[sol_x1, sol_x2] = solve([eq1 == 0, eq2 == 0], [x1, x2]);

% 转换为数值解
sol_x1 = double(sol_x1);
sol_x2 = double(sol_x2);

% 筛选实数解
real_solutions = [sol_x1, sol_x2];
real_solutions = real_solutions(imag(real_solutions(:, 1)) == 0 & imag(real_solutions(:, 2)) == 0, :);

% 输出实数解
disp('Real solutions (x1, x2):');
disp(real_solutions);

输出为空值,这表明在解的过程中遇到了问题。

求解交点方法2:solve加求解范围(成功)

% 定义符号变量
syms x1 x2;

% 求解范围
assume(x1>=0&x1<=100)
assume(x2>=0&x2<=100)

% 定义参数
b = 0.8;
l = atan2(x2, x1);

% 定义方程组
eq1 = 10 + 110 * (b + 0.05 + 0.4 * sin(4 * l)^16)^2 - (x1 + x2);
eq2 = x1 + x2 - 100;

% 解方程组
[sol_x1, sol_x2] = solve([eq1 == 0, eq2 == 0], [x1, x2]);

% 转换为数值解
sol_x1 = double(sol_x1);
sol_x2 = double(sol_x2);

% 筛选实数解
real_solutions = [sol_x1, sol_x2];
real_solutions = real_solutions(imag(real_solutions(:, 1)) == 0 & imag(real_solutions(:, 2)) == 0, :);

% 输出实数解
disp('Real solutions (x1, x2):');
disp(real_solutions);

输出:
在这里插入图片描述

求解交点方法3:fsolve(成功)

下面通过数值方法而不是符号方法来找到解,使用 fsolve(数值求解函数):

% 定义匿名函数
func = @(x) [10 + 110 * (b + 0.05 + 0.4 * sin(4 * atan2(x(2), x(1)))^16)^2 - (x(1) + x(2)), x(1) + x(2) - 100];

% 设置选项以使用较大的初始搜索范围
options = optimoptions('fsolve', 'Display', 'off', 'MaxFunctionEvaluations', 6000, 'MaxIterations', 4000);

% 存储解
solutions = [];

% 尝试多个随机初始猜测
for i = 1:100
    initial_guess = rand(1, 2) * 100; % 生成0到100之间的随机初始猜测
    [sol, fval, exitflag, output] = fsolve(func, initial_guess, options);
    % 只有当fsolve成功收敛时才记录解
    if exitflag > 0 && all(abs(fval) < 1e-6)
        solutions = [solutions; sol];
    end
end

% 去除重复的解,考虑数值误差
solutions = round(solutions, 3); % 四舍五入到三位小数
solutions = unique(solutions, 'rows', 'stable');

% 过滤掉不在感兴趣区域的解
solutions = solutions(all(solutions >= 0 & solutions <= 100, 2), :);

% 输出数值解
disp('Numerical solutions (x1, x2):');
disp(solutions);

输出:
在这里插入图片描述
这表明成功找到了交点的坐标,不过误差稍大一些。

总结

  • 使用solve时,限制求解范围是重要的
  • 当solve无能为力的时候,可以试试fsolve

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/419089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模拟算法题练习(二)(DNA序列修正、无尽的石头)

&#xff08;一、DNA序列修正&#xff09; 问题描述 在生物学中&#xff0c;DNA序列的相似性常被用来研究物种间的亲缘关系。现在我们有两条 DNA序列&#xff0c;每条序列由 A、C、G、T 四种字符组成&#xff0c;长度相同。但是现在我们记录的 DNA序列存在错误&#xff0c;为了…

Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client

Elasticsearch入门-环境安装ES和Kibana 安装 ES Windows安装ESHead安装浏览器插件 es-clientKibana 安装 安装es,安装header 安装kibana&#xff0c;安装多种分词器ik… 安装 ES Windows安装 ① 下载压缩包并解压官网链接&#xff1a;https://www.elastic.co/cn/downloads/ela…

【MATLAB】兔子机器人腿部_simulink模型解读(及simulink中的simscape的各模块介绍)

一、动力学模型 总系统引脚含义 关节电机 Fcn 搭建方程&#xff0c;输入与输入方程 phi1 -q 大腿 小腿同理 车轮 另一边对称 虚拟腿传感器 二、控制模型 VMC解算五连杆 Pulse Generator 腿长控制器PID leg_conv.m&#xff1a;可由虚拟腿目标扭矩和推力求得电机所需…

通过jenkins进行部署java程序到centos上

1.通过jumpserver访问到centos上&#xff0c;准备下java环境 // step1: 先编辑下 vim /etc/profile// step2: 编写好环境变量 JAVA_HOME/usr/local/java export JAVA_HOME export ZOOKEEPER_HOME/opt/zookeeper/apache-zookeeper-3.7.0-bin PATH$PATH:$JAVA_HOME/bin:$ZOOKEEP…

正信晟锦:借了钱的人一直不接电话不回信息咋办

在金钱往来中&#xff0c;遇到借出的钱款无法按时回收&#xff0c;且借款人如同人间蒸发一般不接电话、不回信息&#xff0c;确实让人焦虑。面对这种情形&#xff0c;我们需采取明智而有效的措施&#xff0c;以保护自身的权益。 首要策略是保持冷静&#xff0c;不要让情绪主导行…

民间最大的天涯社区宣布:今起,全面恢复!

想到去年一则不起眼的消息&#xff1a;天涯社区已经无法打开。 时代抛弃你的时候&#xff0c;都不说一声再见&#xff0c;现实就是这样残酷。 在互联网的浩瀚星河中&#xff0c;天涯社区曾是最亮的那颗星星&#xff0c;见证了无数网友的青春岁月。 记得我读大学的时候&#xff…

npm使用国内淘宝镜像的方法整理

命令配置安装&#xff1a; 淘宝镜像&#xff1a; npm config set registry https://registry.npm.taobao.org/ 官方镜像&#xff1a; npm config set registry https://registry.npmjs.org 通过cnpm安装&#xff1a; npm install -g cnpm --registryhttps://registry.npm.…

基于springboot+vue的科研工作量管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

航拍无人机技术,航拍无人机方案详解,无人机摄影技术

航拍无人机是利用遥控技术和摄像设备&#xff0c;在空中进行拍摄和录像的无人机。这种无人机通常具有高清摄像设备、图像传输设备、GPS定位系统、智能控制系统等&#xff0c;可以轻松实现各种拍摄角度和高度&#xff0c;广泛应用于影视制作、旅游景区航拍、城市规划、环保监测等…

111.龙芯2k1000-pmon(11)- gzrom-dtb.bin 文件的组成

最近又要折腾2k1000的设备了&#xff0c;研究了一下gzrom文件组成部分。 pmon的编译可以参考之前的文档&#xff0c;这里我就不详述了 源码&#xff1a;GitHub - zhaozhi0810/pmon-ls2k1000-2022 gzrom-dtb.bin的生成命令在Makefile.inc&#xff08;zloader.ls2k-hj20004目录…

Vue+SpringBoot打造农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

冒泡、插入、希尔、选择、堆排序、快速排序(附源码)

目录 插入排序&#xff1a; 核心思想&#xff1a; 时间复杂度&#xff1a; 冒泡排序&#xff1a; 核心思想&#xff1a; 时间复杂度&#xff1a; 希尔排序&#xff1a; 核心思想&#xff1a; 时间复杂度&#xff1a; 选择排序&#xff1a; 核心思想&#xff1a; 时间…

YOLO目标检测——斑马线目标检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;自动驾驶系统、智能交通监控、行人保护系统、辅助驾驶功能数据集说明&#xff1a;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo…

NVIDIA\CUDA\cudnn安装以及visual studio2022编译安装ceres2.2.0库

一、NVIDIA驱动安装 网址:官方驱动 | NVIDIA 因为本文之后需要visual studio2022进行编译&#xff0c;所以在安装NVIDIA\CUDA\cudnn之前你先得安装visual studio2022 点击NVIDIA控制面板&#xff0c;NVIDIA Control Panel 查看产品家族 根据产品家族选择驱动&#xff0c;点…

【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

【QT 5 Linux下软件qt软件打包qt生成软件创建可以安装压缩包学习他人文章第三篇&#xff1a;学习打包】 1、前言2、实验环境3、自我学习总结-本篇总结&#xff08;1&#xff09;了解安装包的目录结构&#xff08;2&#xff09;了解要编写文件与编写脚本1. control文件2. postin…

一封来自 DatenLord 关于GSoC 2024的挑战书

Google Summer of Code 是一项全球性的在线计划&#xff0c;致力于将新的contributor引入开源软件开发领域。GSoC 参与者在导师的指导下&#xff0c;与开源组织合作开展为期 12 周以上的编程项目。今年&#xff0c;达坦科技入选作为开源社区组织&#xff0c;携CNCF Sandbox项目…

比亚迪领航新能源时代:汉唐传承,品牌力量

比亚迪&#xff0c;以中国文化的深度与自信&#xff0c;为新能源汽车领域注入强大动力。汉唐车型&#xff0c;不仅承载着中国古代文明的辉煌&#xff0c;更以其创新技术和环保理念&#xff0c;终结油电之争&#xff0c;让燃油车再次破防。作为销量冠军&#xff0c;比亚迪品牌的…

中间件-Nginx加固(控制超时时间限制客户端下载速度并发连接数)

中间件-Nginx加固&#xff08;控制超时时间&限制客户端下载速度&并发连接数&#xff09; 1.1 Nginx 控制超时时间配置1.2 Nginx 限制客户端下载速度&并发连接数 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1.1 Nginx 控制超…

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上&#xff0c;SD NAND&#xff08;Secure Digital NAND&#xff09;可以有多种应用&#xff0c;其中一些可能包括&#xff1a; 导航数据存储&#xff1a; SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…

自主研发!军事医学研究院团队提出 MIDAS,可用于单细胞多组学数据马赛克整合

众所周知&#xff0c;细胞是生命体的最小组成单位&#xff0c;人体内含有 40-60 万亿个细胞&#xff0c;构成了我们生长、发育的基础&#xff0c;在单细胞层面开展研究对于精确理解细胞的生长发育以及疾病的诊断与治疗至关重要。 近年来&#xff0c;单细胞测序技术异军突起&am…
最新文章