一元四次方程求解-【附MATLAB代码】

目录

前言

求解方法

MATLAB验证

附:一元四次方程的故事


前言

        最近在研究机器人的干涉(碰撞)检测,遇到了一个问题,就是在求椭圆到原点的最短距离时,构建的方程是一个一元四次方程。无论是高中的初等数学,大学的高等数学,还是研究生的高等代数,都没有关于一元四次方程的求解方法,大多都是一元二次方程的求解。仔细一研究才知道为什么很少提及一元四次方程。具体解法如下:

求解方法

MATLAB验证

% output
% root:为方程的解(根),i 为解的个数
% input
% parameter 为方程的5个系数function [root,i] = MYSolve4OrderEquaton(parameter)
a=parameter(2)/parameter(1);
b=parameter(3)/parameter(1);
c=parameter(4)/parameter(1);
d=parameter(5)/parameter(1);a3=1;
b3=-b;
c3=(a*c-4*d);
d3=-(a^2*d-4*b*d+c^2);
parameter3=[a3,b3,c3,d3];
[root3,y3,i3] = Solve3OrderEquaton(parameter3);
i=0;
root=[];
for j=1:1if(a^2/4-b+root3(j)<0||root3(j)^2/4-d<0)break;endalpha=sqrt(a^2/4-b+root3(j));beta=sqrt(root3(j)^2/4-d);if(a*root3(j)/2-c>0)a21=1;b21=a/2-alpha;c21=root3(j)/2-beta;parameter21=[a21,b21,c21];[root21,y21,i21] = Solve2OrderEquaton(parameter21);a22=1;b22=a/2+alpha;c22=root3(j)/2+beta;parameter22=[a22,b22,c22];[root22,y22,i22] = Solve2OrderEquaton(parameter22);elsea21=1;b21=a/2-alpha;c21=root3(j)/2+beta;parameter21=[a21,b21,c21];[root21,y21,i21] = Solve2OrderEquaton(parameter21);a22=1;b22=a/2+alpha;c22=root3(j)/2-beta;parameter22=[a22,b22,c22];[root22,y22,i22] = Solve2OrderEquaton(parameter22);endroot4{j}=[root21,root22];i4{j}=[i21,i22];root=[root,root4{j}];i=i+i21+i22;
end
end
function [root,y,i] = Solve3OrderEquaton(parameter)
a=parameter(1);
b=parameter(2);
c=parameter(3);
d=parameter(4);
a_2=a*a;
a_3=a_2*a;
b_2=b*b;
b_3=b_2*b;
p=c/3/a-b_2/9/a_2;
q=d/2/a+b_3/27/a_3-b*c/6/a_2;
delta=q*q+p^3;
if(delta>0)i=1;root=nthroot(-q+sqrt(delta),3)+nthroot(-q-sqrt(delta),3)-b/3/a;
elseif(delta==0)i=2;root(1)=-2*nthroot(q,3)-b/3/a;root(2)=nthroot(q,3)-b/3/a;
elsei=3;alpha=1/3*acos(-q*sqrt(-p)/p^2);root(1)=2*sqrt(-p)*cos(alpha)-b/3/a;root(2)=2*sqrt(-p)*cos(alpha+2/3*pi)-b/3/a;root(3)=2*sqrt(-p)*cos(alpha+4/3*pi)-b/3/a;
end
y=a*root.^3+b*root.^2+c*root+d;
end
function [root,y,i] = Solve2OrderEquaton(parameter)
a=parameter(1);
b=parameter(2);
c=parameter(3);
delta=b^2-4*a*c;
if(delta>0)i=2;root(1)=(-b+sqrt(delta))/2/a;root(2)=(-b-sqrt(delta))/2/a;
elseif(delta==0)i=1;root=-b/2/a;
elsei=0;root=[];
end
y=a*root.^2+b*root+c;
end

测试代码

clc;
clear;
parameter = [1,1,1,1,0];
[root,i]=MYSolve4OrderEquaton(parameter);
[root,i]

结果验证

附:一元四次方程的故事

        塔尔塔利亚是意大利人,出生于1500年。他12岁那年,被入侵的法国兵砍伤了头部和舌头,从此说话结结巴巴,人们就给他一个绰号“塔尔塔利亚”(在意大利语中,这是口吃的意思),真名反倒少有人叫了,他自学成才,成了数学家,宣布自己找到了三次方程的的解法。这时,意大利数学家卡丹出场,请求塔尔塔利把解方程的方法告诉他,可是遭到了拒绝。后来卡丹对塔尔塔利假装说要推荐他去当西班牙炮兵顾问,称自己因为无法解三次方程而内心痛苦并发誓永远不泄漏塔尔塔利亚解一元三次方程式的秘密。塔尔塔利亚这才把解一元三次方程的秘密告诉了卡丹。六年以后,卡丹不顾原来的信约,在他的著作《关于代数的大法》中,将经过改进的三次方程的解法公开发表。后人就把这个方法叫作卡丹公式,塔尔塔利亚的名字反而被湮没了。     

        卡当公布了塔塔利亚发现的一元三次方程求根公式之后,塔尔塔利亚谴责卡当背信弃义,提出要与卡当进行辩论与比赛。这场辩论与比赛在米兰市的教堂进行,代表卡当出场的是卡当的学生费拉里。
        费拉里(Ferrari L.,1522~1565)出身贫苦,少年时代曾作为卡当的仆人。卡当的数学研究引起了他费拉里对数学的热爱,当其数学才能被卡当发现后,卡当就收他作了学生。
        费拉里代替卡当与塔尔塔利亚辩论并比赛时,风华正茂,他不仅掌握了一元三次方程的解法,而且掌握了一元四次方程的解法,因而在辩论与比赛中取得了胜利,并由此当上了波伦亚大学的数学教授。
        一元四次方程的求解方法,是受一元三次方程求解方法的启发而得到的。一元三次方程是在进行了一元二次方程从而得解的。于是,如果能够巧妙地把一元四次方程巧妙的换元之后,把问题归结成了转化为一元三次方程或一元二次方程,就可以利用己知的公式求解了。

        不幸的是,就像塔尔塔利亚发现的一元三次方程求根公式被误称为卡当公式一样,费拉里发现的一元四次方程求解方法也曾被误认为是波培拉发现的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件包含漏洞案例

一、PHP://INPUT Example 1&#xff1a;造成任意代码执行 源代码&#xff1a; <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") |…

批量整理文件夹的得力助手:让杂乱无章变得井井有条

在日常工作和生活中&#xff0c;我们经常会遇到这样一个问题&#xff1a;电脑或移动硬盘里的文件夹越积越多&#xff0c;文件散落各处&#xff0c;找起来既费时又费力。 有时候&#xff0c;为了找一个文件&#xff0c;你可能得在无数个文件夹中来回穿梭&#xff0c;仿佛进行了…

C++ 设计模式——命令模式

C 设计模式——命令模式 C 设计模式——命令模式主要组成部分构建过程命令模式 UML 图UML 图解析 命令模式的优点命令模式的缺点命令模式适用场景总结完整代码 C 设计模式——命令模式 命令(Command)模式是一种行为型模式&#xff0c;它将请求封装为对象&#xff0c;从而使您能…

数据中台架构设计

由于当前项目需要对接多个不同的数据源&#xff0c;同时涉及到多端处理&#xff0c;而且需要考虑海量数据处理&#xff0c;还有总部与分部架构部署问题&#xff0c;因而整体技术栈倾向于大数据和分表分库式处理数据层接入问题。 简单讲&#xff0c;项目分为数据中台和业务中台…

[新手入门]1台电脑+1个电视+2个软件(sunshine+moonlight) 解决黑神话悟空没有hdmi线的痛...

sunshinemoonlight 解决黑神话悟空 本地串流投屏 背景:偶然间在B站发现了sunshinemoonlight方案,替代hdmi线,做本地串流...于是心灵手巧的我开始尝试踩坑之路:1.准备安装包2.开始安装2.1 笔记本windows安装sunshine2.2 遇到了第一个坑.Fatal: ViGEmBus is not installed or run…

docke进阶---镜像迁移、容器的ip地址、端口映射和持久化

1.镜像的迁移 1.镜像打包 #查看镜像有一个centos的镜像 [rootdocker0 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 years ago 231MB 3查看帮助文件 docker --help save Save one or more…

【Unity】移动端草海解决方案

草海是开放大世界渲染的必不可少的因素&#xff0c;Unity 原生的 Terrain 草海效率较低&#xff0c;而且无法与 RVT 结合起来&#xff0c;无法在移动端上实现。因此我们自己搓出来一套草海系统&#xff0c;使用 C# 多线程辅助运算&#xff0c;并能支持割草、烧草等进阶玩法。草…

数据库内容保密检查系统:及时发现“潜在”安全威胁

日前&#xff0c;国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相关技术研究开发的领军企业——国联易安自主研发的国联数据库内容保密检查系统V1.0通过国保局涉密检测&#xff0c;获得涉密信息系统产品检测证书。其主要具备以下主…

输入名字转换成对象

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>输入名字转换成对象</title> </head>…

力扣算法总结

直接放别人简单易懂的总结&#xff0c;比我自己描述得好 代码随想录 (programmercarl.com) 崔添翼 (Tianyi Cui) 背包问题九讲 2.0 beta1.2 - jggnice! - 博客园 (cnblogs.com) 1.01背包 优化成一维就是利用之前上一维计算出来的数据&#xff0c;在不损害后面还要用的上一维…

【前端基础篇】JavaScript之BOM介绍

文章目录 浏览器对象模型&#xff08;BOM&#xff09;介绍1. 什么是BOM&#xff1f;2. Window 对象2.1 弹出框2.1.1 警告框2.1.2 确认框2.1.3 提示框 2.2 定时事件2.2.1 延时器2.2.2 定时器 2.3 Window 对象其他常用属性与方法2.3.1 获取窗口尺寸2.3.2 打开新窗口与关闭窗口2.3…

【JS|第25期】探索HTTP POST请求:请求体的演变与应用

日期&#xff1a;2024年8月16日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

iOS RunLoop

一:什么是Runloop Runloop&#xff0c;正如其名&#xff0c;loop表示某种循环&#xff0c;和run放在一起就表示一直在运行着的循环 二:Runloop的创建? iOS并没有提供Runloop的创建方法,因为创建了现场自然会有一个Runloop. 所以只有获取Runloop的方法: NSRunLoop * runloo…

C# 循环访问目录树详解与示例

文章目录 一、目录树遍历的概念二、使用System.IO命名空间三、DirectoryInfo和FileInfo类四、递归遍历目录树五、示例&#xff1a;列出目录树中的所有文件和文件夹六、异常处理七、迭代方法八、总结 在C#中&#xff0c;访问文件系统是常见的需求之一。有时我们需要遍历目录树以…

kafak集群搭建-基于zookeeper方式

kafak集群搭建-基于zookeeper方式 1、准备3个kafka2、修改配置文件2.1、修改配置文件 3、启动测试3.1、先启动zookeeper3.2、再启动三台kafka 4、SpringBoot集成kafka集群4.1、项目配置文件application.yml4.2、kafka配置类4.3、启动SpringBoot程序 5、kafka集群架构分析6、查看…

【kubernetes】相关pod的创建和命令

【书写方法】&#xff1a; 管理使用k8s集群时&#xff0c;创建资源的Yaml文件非常重要&#xff0c;如何快速手写呢&#xff1f; 根据命令提示书写&#xff1a; kubectl explain [资源名称]例如打算写pod资源文件时&#xff0c;可查看如下&#xff1a; # 查看pod下所有字段 …

Google Colab快速使用

Google Colab快速使用 1. 引言2. Jupyter笔记本的创建3. 上传代码和数据集4. Colab常规指令 1. 引言 Google Colab是谷歌提供的免费Jupyter&#xff0c;很类似于Linux系统这些在终端界面操纵的感觉&#xff0c;不需要深度学习环境配置就可以使用&#xff0c;完全基于云端运行。…

在Windows Server 2012 R2上安装.NET Framework 3.5

在Windows Server 2012 R2上安装.NET Framework 3.5&#xff0c;可以按照以下步骤进行&#xff1a; 打开服务器管理器&#xff1a; 首先&#xff0c;登录到Windows Server 2012 R2的服务器。然后&#xff0c;打开“服务器管理器”。添加角色和功能&#xff1a; 在“服务器管理…

针对防火墙IPSec业务不通或业务丢包问题,防火墙如何做流量统计、远程抓包、报文示踪

问题描述 针对防火墙IPSec业务不通或业务丢包问题&#xff0c;防火墙如何做流量统计、远程抓包、报文示踪 解决方案 1&#xff09;配置流统和远程抓包用的ACL&#xff1b; system [sysname] acl 3555 [sysname-acl-adv-3555] rule permit icmp source 10.82.100.215 0 destin…

结构型模式之代理模式

一、概述 1、代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问。 2、代理对象在客户端和目标对象之间起到中介作用 3、引入一个新的代理对象&#xff0c;代理模式的主要目的是在不改变原始对象接口的前提下&#xff0c;增…