IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数值分析第一次作业-牛顿迭代法求解二元非线性方程组 -> 正文阅读

[数据结构与算法]数值分析第一次作业-牛顿迭代法求解二元非线性方程组

1、问题

求解如下方程组:

\left\{ {\begin{array}{*{20}{l}} {f(x,y) = \sin (xy)\exp [ - 0.1*({x^2} + {y^2} + xy + 2x)]}\\ {(x,y) \in [ - 3,1] \times [ - 1,2]} \end{array}} \right.

2、算法

3、代码实现?

?

# *coding:utf-8 *
import math
delta = 5e-6 ;eps = 1e-6
x0 = 1;y0 = 1
er = 1;k = 0
def z(x,y):
    return math.sin(x*y)*math.exp(-0.1*(x**2+y**2+x*y+2*x))
def f(x,y):
    return y*math.cos(x*y)-0.1*(2*x+y+2)*math.sin(x*y)
def g(x,y):
    return x*math.cos(x*y)-0.1*(2*y+x)*math.sin(x*y)
def f_x(x,y):
    return -y**2*math.sin(x*y)-0.2*math.sin(x*y)-0.1*(2*x*y+y**2+2*y)* math.cos(x*y)
def f_y(x,y):
    return math.cos(x*y)-x*y*math.sin(x*y)-0.1*math.sin(x*y)-0.1*(2*x**2+x* y+2*x)*math.cos(x*y)
def g_x(x,y):
    return math.cos(x*y)-x*y*math.sin(x*y)-0.1*math.sin(x*y)-0.1*(2*y**2+x*y)*math.cos(x*y)
def g_y(x,y):
    return -x**2*math.sin(x*y)-0.2*math.sin(x*y)-0.1*(2*x*y+x**2)* math.cos(x*y)
print('使用初值为(',"{0:.1f}".format(x0),', ',"{0:.1f}".format(y0),')')
while er > 0.000000001:
    x1=x0+(f(x0,y0)*g_y(x0,y0)-g(x0,y0)*f_y(x0,y0))/(g_x(x0,y0)*f_y(x0,y0) -f_x(x0,y0)*g_y(x0,y0))
    y1=y0+(g(x0,y0)*f_x(x0,y0)-f(x0,y0)*g_x(x0,y0))/(g_x(x0,y0)*f_y(x0,y0) -f_x(x0,y0)*g_y(x0,y0))
    er=max(abs(x1-x0),abs(y1-y0))
    x0=x1;y0=y1
    k=k+1
    print('迭代次数',"{0:.0f}".format(k),',方程根的近似值为x=', "{0:.10f}".format(x1),',y =',"{0:.10f}".format(y1))
print('误差er=',"{0:.16f}".format(er))
print('方程组的根为(',"{0:.10f}".format(x1),',',"{0:.10f}".format(y1),')', "原函数极小值z=","{0:.10f}".format(z(x1, y1)))

?当初值为(1,1)时,计算结果如表1。

?此时可以得到原二元函数的极小值点为(0.9097471401,1.3180997683),极小值为0.5330808683。然而,当初值取(-1,-1)时,可以得到原二元函数的极小值点为(-1.5221370100,-0.8914954107),极小值为0.8474932827。为什么两个结果不一样呢?

?4、解决问题

当初值不同时,得到的结果完全不一样,之所以出现这样的结果的原因是因为二元函数可能存在多个极小值点或者鞍点。为了探究原二元函数的三维空间形状,用python画出原二元函数的三维图像如图1,三维图像绘制代码picture_3D.py见附录。?

?

?

根据图1,可以清晰地看到原二元函数有且只有一个极小值点。旋转矢量图可以看出原二元函数的极小值点大约在x=-1.5,y=1处,极小值大约为-1.1,如图2、图3。。

于是重新取初值为(-1.5,1),并计算结果,如表3。此时可以得到原二元函数的极小值点为(-1.5931730287,0.9721251312),极小值为-1.1330866542。

附录?

?

# *coding:utf-8 *
import numpy as np
from matplotlib import pyplot as plt
# 定义坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d')
# 定义三维数据
xx = np.arange(-3, 1, 0.05)
yy = np.arange(-1, 2, 0.05)
x, y = np.meshgrid(xx, yy)
z = np.sin(x * y) * np.exp(-0.1 * (x ** 2 + y ** 2 + x * y + 2 * x))
# 作图
ax1.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow')
ax1.contour(x, y, z, stride=0.05, zdim='z', offset=-3, cmap='rainbow')  # 绘制等高线
plt.show()

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:22:02  更:2022-01-03 16:24:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:30:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码