MATLAB符号求解功能居然不能求分段函数??这么离谱的事情你敢信?

离谱的问题

遇到一个很神奇的问题,这两天逛CSDN的时候发现了一个提问:

这个人在求解多元方程组的时候,遇到了以下问题,即求解时遇到了一些特殊的函数,例如分段函数就无法求解:

syms x y
a=x+y;
if x>0b=1;
elseb=2;
end
eqns = [a + b*x == 1, a - b == 2];
S=solve(eqns,[x y]);

无法从 sym 转换为 logical。

出错 demo2 (第 3 行)
if x>0

如果不是求解析解只要数值解的话vpasolve可以轻松解决,但如果非得要解析解呢?

看到这个问题我就想直接使用逻辑表达式来表示分段函数,试了一下不行:

syms x y
a=x+y;
b=1.*(x>0)+2.*(x<=0);
eqns = [a + b*x == 1, a - b == 2];
S=solve(eqns,[x y]);

错误使用 mupadengine/feval_internal
System contains an equation of an unknown type.

出错 sym/solve (第 293 行)
sol = eng.feval_internal(‘solve’, eqns, vars, solveOptions);

出错 demo3 (第 5 行)
S=solve(eqns,[x y]);

MATLAB符号求解功能居然不能求分段函数??这么离谱的事情你敢信?

离谱的解决方案

但是我发现,solve函数是可以在里面包含heaviside这样指示正负的函数的(就是变量取值为正数、负数和零时返回值吧不同),于是我灵机一动把代码改为了一个很离谱的格式:

syms x y
a=x+y;
b=floor(heaviside(x)) - 2*abs(2*heaviside(x) - 1) + 2*floor(-heaviside(x)) + 4;
b=piecewiseSym(x,0,[2,1],2);
eqns = [a + b*x == 1, a - b == 2];
S=solve(eqns,[x y])

S =
包含以下字段的 struct:

x: -3/2
y: 11/2

分段函数表达式生成器

但是只分成两段都得写出

b=floor(heaviside(x)) - 2abs(2heaviside(x) - 1) + 2*floor(-heaviside(x)) + 4;

这么长的表达式,那多分几段,复杂度不是要上天?这么麻烦的工作当然要封装成函数来做,于是有了下面这玩意:

工具函数

function pwFunc=piecewiseSym(x,waypoint,func,pfunc)
% @author : slandarergSign=[1,heaviside(x-waypoint)*2-1];
lSign=[heaviside(waypoint-x)*2-1,1];inSign=floor((gSign+lSign)/2);
onSign=1-abs(gSign(2:end));inFunc=inSign.*func;
onFunc=onSign.*pfunc;pwFunc=simplify(sum(inFunc)+sum(onFunc));
end

函数介绍

输入变量含义:

  • x : 自变量
  • waypoint : 分段函数分段点
  • func : 每一段上的函数
  • pfunc : 分段点上的函数值

例子

比如对于:
f(x)={−x−1x≤−1−x2+1−1<x<1(x−1)3x≥1f(x)=\left\{\begin{matrix} -x-1&x\le -1 \\ -x^2+1 & -1<x<1\\ (x-1)^3 & x\ge 1 \end{matrix}\right. f(x)=⎩⎨⎧​−x−1−x2+1(x−1)3​x≤−1−1<x<1x≥1​

可这样获取分段函数:

syms x
%            变量 分段点     每段上的函数         端点处的函数
f=piecewiseSym(x,[-1,1],[-x-1,-x^2+1,(x-1)^3],[-x-1,(x-1)^3]);

比如求该分段函数与f=0.4的交点解析解并绘图:

% 定义分段函数
syms x
%            变量 分段点     每段上的函数         端点处的函数
f=piecewiseSym(x,[-1,1],[-x-1,-x^2+1,(x-1)^3],[-x-1,(x-1)^3]);
% 求解
S=solve(f==.4,x)
% 绘图
xx=linspace(-2,2,500);
f=matlabFunction(f);
yy=f(xx);
plot(xx,yy,'LineWidth',2);hold on
scatter(double(S),.4.*ones(length(S),1),50,'filled')

S =
-7/5
(2 ^ (1/3)*5^(2/3))/5 + 1
-15^(1/2)/5
15^(1/2)/5

前例

对于之前的例子只需要将代码改写如下形式即可:

syms x y
a=x+y;
b=piecewiseSym(x,0,[2,1],2);
eqns = [a + b*x == 1, a - b == 2];
S=solve(eqns,[x y])

S =
包含以下字段的 struct:

x: -3/2
y: 11/2


MATLAB | solve函数求解析解时不支持分段函数的解决方案相关推荐

  1. 廖雪峰讲python高阶函数求导公式_高阶函数 - 廖雪峰 Python 2.7 中文教程

    高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下 ...

  2. 计算机函数求最大值怎么设置,高中数学函数的最大值和最小值怎么求

    函数的最值问题是考试中经常出现的题型,那么遇到这类问题时我们应该怎么做呢? 高中函数求最值的方法 1.配方法:形如的函数,根据二次函数的极值点或边界点的取值确定函数的最值. 2.判别式法:形如的分式函 ...

  3. mysql 聚合函数求平均数_MySQL教程63-MySQL 聚合函数

    MAX函数:查询指定列的最大值 MySQL MAX() 函数是用来返回指定列中的最大值. 为了方便理解,首先创建一个学生成绩表 tb_students_score,学生成绩表的数据内容如下所示. my ...

  4. 使用函数求最大公约数 pta_使用PRODUCT函数计算乘积,已知单价、数量、折扣率求商品金额...

    哈喽,今日头条的小伙伴们大家好,我是你们的好朋友IT咨询顾问. 使用PRODUCT函数可以求数组数值的乘积.例如,根据"定价""数量""消费税&quo ...

  5. 怎样使用计算机函数求出等级,巧用Excel函数出练习题

    小学低年级的学生家长是不是都有这样的烦恼,就是给孩子出加减乘除法数学练习题.每次都要绞尽脑汁,一百题中不小心就会出现多处重复.另外这样简单的练习题一定浪费了您不少宝贵的时间,可是孩子的事情比什么都重要 ...

  6. matlab匿名函数实现含参变量的对分段函数的不定积分及绘图

    这个折腾了一晚上,注视是因为我菜,还有一点原因是因为我强迫症--总不想代入数值(觉得那种分段函数只是离散函数,不是连续分段函数). 主要想法 用阶跃函数实现分段(其实逻辑表达也行). fplot的使用 ...

  7. python计算分段函数_Python练习题2.2计算分段函数

    本题目要求计算下列分段函数f(x)的值: 输入格式: 输入在一行中给出实数x. 输出格式: 在一行中按"f(x) = result"的格式输出,其中x与result都保留一位小数. ...

  8. python分段函数图像画法_数值实验分段函数图像-Python绘图

    一.函数说明 在使用python作图时,应用最广的就是matplotlib包,但我们平时使用matplotlib时主要是画一些简单的图表,很少有涉及分段函数.本次针对数值实验中两个较为复杂的函数,使用 ...

  9. python 分段函数 表示曲面_绘制三维分段函数

    我是python的新手,正在尝试3d绘制分段函数.我试图在z轴上绘制下面的"主公式"函数,因为它随x和y的变化而变化,范围从0到10,常数=1.但我似乎不太明白这里的作图方法.在f ...

最新文章

  1. SpringBean默认是单例的,高并发情况下,如何保证并发安全?
  2. VASP计算HSE06带隙INCAR
  3. 解决img标签间距问题
  4. 【LeetCode笔记】11.盛最多水的容器(Java、双指针法)
  5. Uva 1025 - A Spy in the Metro(DP)
  6. Bitcoin是什么意思
  7. lighttpd 之防盗链
  8. mysql支持啥系统_快速的掌握MySQL支持的操作系统
  9. python调用nmap扫描全端口_python nmap实现端口扫描器教程
  10. 有哪些计算机法人快捷键,tras企业版操作说明.doc-广东省国家税务局.doc
  11. uniapp配置全局样式
  12. 在线字典学习(Online dictionary learning for sparse coding)-机器学习
  13. EditText的属性!
  14. 软件项目经理在面试的时候会问到哪些问题?
  15. 16种常用的数据分析方法-因子分析
  16. Linux动物乐园 Ubuntu版本代号赏析
  17. 大数据培训完一般可以做哪些工作?
  18. MP之自定义分页,多表查询带分页带条件(Error evaluating expression ‘ew.customSqlSegment‘.或 Invalid bound statement)
  19. 基于MVC的网上汽车城网站平台开发
  20. ViT-Adapter:Vision Transformer Adapter for Dense Predictions

热门文章

  1. 2022-2028年中国尘螨脱敏治疗药物行业市场运行态势及发展战略研究报告
  2. pythoneducoder苹果梨子煮水的功效_荸荠和梨子一起煮的好处
  3. ue4 输出360度全景深度图
  4. 细胞工程-6-原生质体分离核体细胞杂交
  5. latex中表格怎么加标题_导出到LaTeX时,使组织表格标题显示在表格下方 | 所有编程讨论 | zhouni.net...
  6. 前端网络请求的错误处理
  7. 三菱运动控制电子凸轮应用 三菱Q173系列的电子凸轮使用
  8. 使用maya.cmds加载和卸载插件
  9. Jetpack Compose 无限加载列表(滚到底部自动加载更多)
  10. 操作系统笔记整理12——磁盘存储器的管理