二元隐函数 数值求解

我写了一个 对 二元隐函数 数值求解 的 程序   。

二元隐函数 就是一个 二元方程,  就是 一个方程 有 2 个 未知数,  把 未知数 看作 变量,  那 二元方程 就是 二元隐函数  。

一个未知数 看作 自变量,   另一个 未知数 看作 因变量   。

我们把 自变量 统称为 x,   因变量 统称为 y    。

这样,   二元隐函数 可以 表示成 :      y = f ( x, y )   ,  或者    x = f ( x, y )   ,    或者    f ( x, y ) = C ,   C 为 常量    。

比如,  我们可以看看 一个 极坐标系 的 二元隐函数 :    ρ = tan ( θ + ρ )    ,   θ 为 自变量,  ρ 为 因变量   。

也可以写成 :           y = tan ( x + y )       。

对 二元隐函数 求解 就是 求 当 x = 某值 时,   y 的 值 是多少   。

我写的 程序 默认就是 对    y = tan ( x + y )    这个 二元隐函数 求解 的 ,   效果如下 :

x 表示 当 x = 某值 时 的 x,   就是 求 这个 x 对应 的 y   。

y 初始值 表示 数值求解 用于 匹配 的 y 的 初始值 ,    记为   y?   。

数值求解 的 算法 是这样,   记 y 的 初始值 为 y?,   从 y? 开始,  用 y? 加上 一定 的 步长, 得到一个 y 值, 记为 y1, 把  y1 和 x 代入 方程,  计算得出 方程 等式两边 的 值,   然后求 等式两边 的 值 的 差 的 绝对值,  记为 diff   。    如果 diff 很小,  说明 等式两边 相差小,  则  y1  比较符合 x 对应 的 y,  即  y1  比较接近 理论解 。

如果 diff  很大,  说明 等式两边 相差大,  则  y1  不太符合 x 对应 的 y,  即  y1  比较远离 理论解    。

所以,   所以, diff 也表示计算精度 。 diff 越小,计算精度越高, diff 越大,计算精度越低 。

上述过程 称为 一个步长 的 匹配,  在完成一个步长的 匹配 后,  计算机 会 增加一个 步长, 即 让 y? 加上 2 个步长,   即 :

y2 = y? + 步长 * 2

把 y2 和 x 代入方程,  求 diff,   这和  y1 的 过程 一样  ,    同理,    求

y3 = y? + 步长 * 3

y4 = y? + 步长 * 4

y5 = y? + 步长 * 5

……

的 diff,    diff 最小 的 yn  就是  最终输出 的 解 。

而 求多少个 yn 呢?  这由 步数 决定,  比如 可以设定 步数 为 10, 或者  100  等等    。

这样 求出来 的 解 还是 很粗略 的,  为了 提高 解 的 精度,  可以 设定 一个 新的 步长 和 步数,  再进行一轮 匹配   。

新一轮 的 步长 通常 比 上一轮 小,    表示 更 精细 的 匹配    。

用 上一轮 的 解(上一轮 中 diff 最小的 yn) 作为 下一轮 的 初始值  y?    。

这样 经过 若干轮 匹配 之后,   得到 的 解 就 比较 精确 了  ,  或者说 diff 很小   。

这个算法 称为   跨越逼近法,  又称为   离散统计逼近法    。

这个算法 的 时间复杂度 是    O ( 第 1 轮 步数 + 第 2 轮 步数 + …… + 第 n 轮 步数 )    。

如果 进行 9 轮 匹配,  每轮 步数 是 10,   则 时间复杂度 是  O ( 9 * 10 ) =  O ( 90 )      。

原文地址:https://www.cnblogs.com/KSongKing/p/12109699.html

时间: 2024-09-30 23:58:30

二元隐函数 数值求解的相关文章

极坐标系 隐函数 数值求解 并 绘制 函数图像

我写了一个 极坐标系 隐函数 数值求解 并 绘制 函数图像 的 程序   DrawPolarFunc  . 项目地址 :            https://github.com/kelin-xycs/DrawPolarFunc            . 进入 项目页面 后 点击 右边绿色 的 “Clone or download” 按钮 就可以下载 项目文件 了 .  项目中 只有一个 程序文件   DrawPolarFunc.html  , 用 Html5 + javascript  写的

丢翻图方程组 最小解 计算机 数值求解

我写了一个 程序  DiophantusMin  , 用 数值方法 求解 丢翻图方程组 的 最小解    . 算法 是  跨越逼近法,    算法 和 原理 见 <二元隐函数 数值求解>   https://www.cnblogs.com/KSongKing/p/12109699.html     . 丢番图方程组 是 不定方程组,  求 整数解  .   DiophantusMin  只 求 最小解  ,   因为是 数值方法, 所以 严格的说, 是 未知数 绝对值 尽可能小 的 近似解 

SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu

%SA:T1法利用Matlab编写主函数实现对定义域[-5,5]上的二元函数求最优解-Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20; figure mesh(x,y,z) hold on xlabel('x') ylabel('y') zlabel('z') title('SA:利用SA最优化,定义域[-5,5]上的二元函数z = x^2

C# 二元一次方程参数求解

本文记录了关于求直线斜率及纵截距值的简单方法,只是简单的记录下求解思路,最终还需根据具体项目进行优化. 设直线方程式为:y=kx+b 编程思想: 1.代入y1与x1的值,得到:y1=kx1+b 2.代入y2与x2的值,得到:y2=kx2+b 3.首先算出一个系数m=kx1 / kx2 或 m=kx2 / kx1 4.根据第三步,将 y1=kx1+b 或 y2=kx2+b 乘以系数m,使 kx1==kx2 ,注意 kx1与kx2不能为0 4.将2个函数相减,例如:my2-my1=mb-b 即 m(

二元一次方程组求解

首先要找到二元一次方程组的通解,例如: ax+by=m cx+dy=n 不难算出 x=(md-bn)/(ad-bc) y=(mc-an)/(bc-ad) 程序代码: #include<stdio.h> #include<math.h> int main(){ int a,b,c,d,m,n; double x=0,y=0; scanf("%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&m,&n);

Euler-Maruyama discretization(&quot;欧拉-丸山&quot;数值解法)

欧拉法的来源 在数学和计算机科学中,欧拉方法(Euler method)命名自它的发明者莱昂哈德·欧拉,是一种一阶数值方法,用以对给定初值的常微分方程(即初值问题)求解.它是一种解决常微分方程数值积分的最基本的一类显型方法(Explicit method). [编辑] 什么是欧拉法 欧拉法是以流体质点流经流场中各空间点的运动即以流场作为描述对象研究流动的方法.--流场法 它不直接追究质点的运动过程,而是以充满运动液体质点的空间--流场为对象.研究各时刻质点在流场中的变化规律.将个别流体质点运动过

一维Burgers方程数值解法

一维Burgers方程 一维burgers方程为: 由于等式右边可以进行积分: 利用F = u**2,则方程为: 假设u初始为阶跃函数: 数值解法采用MacCormack格式: 但是这一解法,有失真的性质,后面具体介绍. 所以根据这一格式,可以直接数值求解,并利用matplotlib画出动态的数值图形,具体代码如下: # -*- coding: utf-8 -*- """ Created on Tue Jan 20 14:32:23 2015 1D burges equati

点堆中子动力学方程求解程序

我学的是核科学与技术专业,本科和硕士期间写了不少程序,如计算堆芯中子动力学的,计算流体力学的.但多数仅针对具体问题,通用性有些不足.硕士修了一门仿真技术的课程,我的作业是求解点堆中子动力学程序,靠这个还拿了优秀.觉得这个程序还蛮通用的,对于同专业的搞个大作业,或用于毕设等或许有帮助. 详细的推导.验证过程.程序代码见:https://github.com/ikheu/point_reactor 1.概述 计算中子通量密度的瞬变特性,对反应堆动力系统的运行安全分析与仿真而言十分重要.点堆中子动力学

数值优化:计算基本理论

1. 优化问题 最一般的优化问题的表述是这样的: 求解等式约束 $\boldsymbol{g}(\boldsymbol{x})=0$ 和不等式约束 $\boldsymbol{h}(\boldsymbol{x})\leq 0$ 下使得取得 $\min f(\boldsymbol{x})$ 的解 $\boldsymbol{x}$ 其中 $f:\mathbb{R}^n\Rightarrow \mathbb{R}$,$\boldsymbol{g}:\mathbb{R}^n\Rightarrow \mat