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

news2024/11/27 20:58:58

目录

前言

求解方法

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:1
    if(a^2/4-b+root3(j)<0||root3(j)^2/4-d<0)
        break;
    end
    alpha=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);
    else
        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);
    end
    root4{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;
else
    i=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;
else
    i=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.coloradmin.cn/o/2062738.html

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

相关文章

pip出问题了,重装,获取python3.7 get-pip.py

下载脚本&#xff0c;对应版本 curl https://bootstrap.pypa.io/pip/3.7/get-pip.py -o get-pip.py https://bootstrap.pypa.io/pip/3.7/get-pip.py 安装 python get-pip.py windows下默认没有cur.exe 下载地址&#xff1a;通过百度网盘分享的文件&#xff1a;curl_windows…

论文翻译:Universal and Transferable Adversarial Attacks on Aligned Language Models

Universal and Transferable Adversarial Attacks on Aligned Language Models https://arxiv.org/pdf/2307.15043v2 通用且可转移的对抗性攻击对齐语言模型 文章目录 通用且可转移的对抗性攻击对齐语言模型摘要1 引言2 一个针对LLMs的通用攻击2.1 产生肯定回应2.2 贪婪坐标梯…

vue3 安装element-plus进行一些简单的测试

1、安装element-plus 官网地址&#xff1a;https://element-plus.org/zh-CN/guide/installation.html 2、安装方法&#xff1a; # 选择一个你喜欢的包管理器# NPM npm install element-plus --save# Yarn yarn add element-plus# pnpm pnpm install element-plus 这里我选择…

嵌入式AI快速入门课程-K510篇 (第二篇 Ubuntu的基础操作)

第二篇 Ubuntu的基础操作 文章目录 第二篇 Ubuntu的基础操作1. 安装 VMware 运行 Ubuntu1.1 安装 VMware 1.2 使用VMware打开Ubuntu1.2.1 下载、解压Ubuntu映像文件1.2.1 在BIOS上启动虚拟化(virtualization)1.1.1 使用VMware运行Ubuntu 2.第1章 Ubuntu操作入门1.1 Ubuntu下打开…

Vmware虚拟机接入物理机路由器网络

网络适配器增加至两个&#xff0c;一个选NAT, 另一个选host-only,再加一个桥接&#xff0c;不勾选使用物理网卡&#xff0c;然后重启即可&#xff01;

数据结构--图(Graph)

定义 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成的一种非线性表结构&#xff0c;通常表示为&#xff1a;G(V,E)&#xff0c;其中&#xff0c;G表示一个图&#xff0c;V是图G中顶点的集合&#xff0c;E是图G中边的集合。 顶点&#xff08;…

three.js实现 加载3dtiles ,瓦片 ,倾斜摄影,功能

预览&#xff1a;https://z2586300277.github.io/three-cesium-examples/#/codeMirror?navigationThreeJS&classifyexpand&idloadTiles 部署站点预览&#xff1a;http://threehub.cn/ 开源地址&#xff1a;https://z2586300277.github.io/three-cesium-examples/#/e…

mp3和mp4的区别是什么?怎么把mp3转成mp4?(全)

在生活中我们或多或少会听到“mp3”和“mp4”&#xff0c;那么什么是mp3和mp4呢&#xff1f;mp3和mp4的区别是什么&#xff1f;mp3是一种音频压缩技术&#xff0c;旨在在不显著牺牲音质的前提下减小音频文件的体积&#xff0c;使其适用于音乐和其他音频内容的存储与传输。相比之…

压测时,并发量过高时,响应时间出现尖刺

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

C++STL~~vector

文章目录 一、vector的概念二、vector的使用三、vector 迭代器失效问题四、vector的练习五、总结 一、vector的概念 vector是一个功能强大的模板类&#xff0c;用于表示动态数组。 动态大小调整&#xff1a; std::vector可以根据需要自动增长或收缩其存储的元素数量。这意味着…

tyut-数据库期末复习要点

第一章 数据库系统&#xff08;DBS&#xff09;是由数据库&#xff08;DB&#xff09;&#xff0c;数据库&#xff08;DBMS) &#xff0c;应用程序和数据库管理员 (DBA)组成的存储&#xff0c;管理&#xff0c;处理和维护数据的系统 数据模型&#xff1a;比较真实的模拟现实世…

如和写一个库,并发布,我的colorfontcolor产生使用

闲来无事&#xff0c;写了一个npm包 1.1.2版本以后可以使用&#xff0c;前面的版本都是bug colorfontcolor 具体使用具体实现出现的细节出现的问题 写包时出现的问题用的相关库问题 具体使用 npm i colorontcolor //es6环境,vue组件中使用 <template><div><h1 …

交通流量预测,模型优化

交通流量预测&#xff0c;时空预测 模型优化&#xff0c;网络搭建 时间序列预测、车辆轨迹预测 行人轨迹预测建模 深度学习模型为rnn,lstm,gru,s2s,transformer,diffusion等各大顶会sota方法 个人在做&#xff0c;可加急 保质保量&#xff0c;售后无忧

06、Redis实战:优惠券秒杀、分布式锁Redission、可重入、重试、看门狗、MutiLock

5、分布式锁-redission 5.1 分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题 重入问题是指获取锁的线程&#xff0c;可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;例如在HashTable这样的代…

【赵渝强老师】执行MySQL的冷备份与冷恢复

冷备份是指发生在数据库已经正常关闭的情况下进行的备份。由于此时数据库已经关闭&#xff0c;通过冷备份可以将数据库的关键性文件拷贝到另外存储位置。冷备份因为只是拷贝文件&#xff0c;因此备份的速度非常快。在执行恢复时&#xff0c;只需将文件再拷贝回去就可以很容易恢…

Vxe UI vue vxe-table 常用功能使用分享

Vxe UI vue vxe-table 常用功能使用分享 表格需求 如果你需要的是一个能够渲染简单场景的表格&#xff0c;那么使用主流 UI 库就够了&#xff0c;例如element ui自带的表格等。 如果你需要是一个能同时满足简单场景以及各类复杂场景、大数量的全功能表格&#xff0c;那么推荐…

YOLOv5改进 | 融合改进 | C3 融合Dilated Reparam Block提升检测效果【附代码+小白可上手】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

电脑照片删除了怎么恢复回来?轻松三步,找回珍贵记忆

在数字时代&#xff0c;我们的电脑里储存了无数珍贵的照片&#xff0c;它们记录着生活的点滴&#xff0c;承载着美好的回忆。然而&#xff0c;一不小心将照片删除&#xff0c;往往会让人心急如焚。别担心&#xff0c;本文将为你详细介绍如何恢复电脑中被删除的照片&#xff0c;…

制造企业WMS库存盘点的应用

1.库存盘点的重要性与挑战 1.1 盘点目的与意义 库存盘点是制造工厂WMS系统中的一项基础性工作&#xff0c;其目的在于确保库存数据的准确性&#xff0c;从而为生产计划、物料需求计划、成本核算等提供可靠的数据支持。盘点的意义主要体现在以下几个方面&#xff1a; - 确保数…

PYUSD跃升为第六大稳定币:借势Solana和高APY的成功之道

随着加密市场的不断发展&#xff0c;稳定币在数字资产生态系统中的重要性日益凸显。PayPal旗下的美元稳定币PYUSD凭借强大的市场背景和策略性扩展&#xff0c;已经迅速成长为第六大稳定币。特别是在与Solana区块链的深度合作&#xff0c;以及高APY&#xff08;年化收益率&#…