日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

深度对比Python(Numpy,Scipy)与Matlab的数值精度

發(fā)布時間:2025/4/16 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度对比Python(Numpy,Scipy)与Matlab的数值精度 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Matlab一度被認(rèn)為是最專業(yè)的數(shù)值計(jì)算工具之一,相信許多同學(xué)都或多或少用過這個工具。相比而言,Python作為一種膠水式的語言,其設(shè)計(jì)之初就不是為科學(xué)計(jì)算服務(wù)的。之前也看到許多人在吐槽說用Python去復(fù)現(xiàn)一些計(jì)算過程時經(jīng)常失敗,因此(包括本人)也懷疑過是Python本身數(shù)值精度不夠?qū)е碌摹D敲碢ython的精度究竟如何,本文就來一探究竟。為了方便,我們就用線性方程組的求解來對比這一事實(shí)。

1、實(shí)驗(yàn)設(shè)計(jì)
  • 基本思路:

本文考慮的線性方程組:
Ax=bAx=b Ax=b

#mermaid-svg-KlQCVM1aHWdwKg9a .label {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);fill: #333;color: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .label text {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .node rect, #mermaid-svg-KlQCVM1aHWdwKg9a .node circle, #mermaid-svg-KlQCVM1aHWdwKg9a .node ellipse, #mermaid-svg-KlQCVM1aHWdwKg9a .node polygon, #mermaid-svg-KlQCVM1aHWdwKg9a .node path {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-KlQCVM1aHWdwKg9a .node .label {text-align: center;fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .node.clickable {cursor: pointer; }#mermaid-svg-KlQCVM1aHWdwKg9a .arrowheadPath {fill: #333333; }#mermaid-svg-KlQCVM1aHWdwKg9a .edgePath .path {stroke: #333333;stroke-width: 1.5px; }#mermaid-svg-KlQCVM1aHWdwKg9a .flowchart-link {stroke: #333333;fill: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .edgeLabel {background-color: #e8e8e8;text-align: center; } #mermaid-svg-KlQCVM1aHWdwKg9a .edgeLabel rect {opacity: 0.9; } #mermaid-svg-KlQCVM1aHWdwKg9a .edgeLabel span {color: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .cluster rect {fill: #ffffde;stroke: #aaaa33;stroke-width: 1px; }#mermaid-svg-KlQCVM1aHWdwKg9a .cluster text {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a div.mermaidTooltip {position: absolute;text-align: center;max-width: 200px;padding: 2px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 12px;background: #ffffde;border: 1px solid #aaaa33;border-radius: 2px;pointer-events: none;z-index: 100; }#mermaid-svg-KlQCVM1aHWdwKg9a .actor {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-KlQCVM1aHWdwKg9a text.actor > tspan {fill: black;stroke: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .actor-line {stroke: grey; }#mermaid-svg-KlQCVM1aHWdwKg9a .messageLine0 {stroke-width: 1.5;stroke-dasharray: none;stroke: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .messageLine1 {stroke-width: 1.5;stroke-dasharray: 2, 2;stroke: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a #arrowhead path {fill: #333;stroke: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .sequenceNumber {fill: white; }#mermaid-svg-KlQCVM1aHWdwKg9a #sequencenumber {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a #crosshead path {fill: #333;stroke: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .messageText {fill: #333;stroke: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .labelBox {stroke: #CCCCFF;fill: #ECECFF; }#mermaid-svg-KlQCVM1aHWdwKg9a .labelText,#mermaid-svg-KlQCVM1aHWdwKg9a .labelText > tspan {fill: black;stroke: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .loopText,#mermaid-svg-KlQCVM1aHWdwKg9a .loopText > tspan {fill: black;stroke: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .loopLine {stroke-width: 2px;stroke-dasharray: 2, 2;stroke: #CCCCFF;fill: #CCCCFF; }#mermaid-svg-KlQCVM1aHWdwKg9a .note {stroke: #aaaa33;fill: #fff5ad; }#mermaid-svg-KlQCVM1aHWdwKg9a .noteText,#mermaid-svg-KlQCVM1aHWdwKg9a .noteText > tspan {fill: black;stroke: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .activation0 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-KlQCVM1aHWdwKg9a .activation1 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-KlQCVM1aHWdwKg9a .activation2 {fill: #f4f4f4;stroke: #666; }#mermaid-svg-KlQCVM1aHWdwKg9a .mermaid-main-font {font-family: "trebuchet ms", verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .section {stroke: none;opacity: 0.2; }#mermaid-svg-KlQCVM1aHWdwKg9a .section0 {fill: rgba(102, 102, 255, 0.49); }#mermaid-svg-KlQCVM1aHWdwKg9a .section2 {fill: #fff400; }#mermaid-svg-KlQCVM1aHWdwKg9a .section1, #mermaid-svg-KlQCVM1aHWdwKg9a .section3 {fill: white;opacity: 0.2; }#mermaid-svg-KlQCVM1aHWdwKg9a .sectionTitle0 {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .sectionTitle1 {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .sectionTitle2 {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .sectionTitle3 {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .sectionTitle {text-anchor: start;font-size: 11px;text-height: 14px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .grid .tick {stroke: lightgrey;opacity: 0.8;shape-rendering: crispEdges; } #mermaid-svg-KlQCVM1aHWdwKg9a .grid .tick text {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .grid path {stroke-width: 0; }#mermaid-svg-KlQCVM1aHWdwKg9a .today {fill: none;stroke: red;stroke-width: 2px; }#mermaid-svg-KlQCVM1aHWdwKg9a .task {stroke-width: 2; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskText {text-anchor: middle;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .taskText:not([font-size]) {font-size: 11px; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutsideRight {fill: black;text-anchor: start;font-size: 11px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutsideLeft {fill: black;text-anchor: end;font-size: 11px; }#mermaid-svg-KlQCVM1aHWdwKg9a .task.clickable {cursor: pointer; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskText.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutsideLeft.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutsideRight.clickable {cursor: pointer;fill: #003163 !important;font-weight: bold; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskText0, #mermaid-svg-KlQCVM1aHWdwKg9a .taskText1, #mermaid-svg-KlQCVM1aHWdwKg9a .taskText2, #mermaid-svg-KlQCVM1aHWdwKg9a .taskText3 {fill: white; }#mermaid-svg-KlQCVM1aHWdwKg9a .task0, #mermaid-svg-KlQCVM1aHWdwKg9a .task1, #mermaid-svg-KlQCVM1aHWdwKg9a .task2, #mermaid-svg-KlQCVM1aHWdwKg9a .task3 {fill: #8a90dd;stroke: #534fbc; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutside0, #mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutside2 {fill: black; }#mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutside1, #mermaid-svg-KlQCVM1aHWdwKg9a .taskTextOutside3 {fill: black; }#mermaid-svg-KlQCVM1aHWdwKg9a .active0, #mermaid-svg-KlQCVM1aHWdwKg9a .active1, #mermaid-svg-KlQCVM1aHWdwKg9a .active2, #mermaid-svg-KlQCVM1aHWdwKg9a .active3 {fill: #bfc7ff;stroke: #534fbc; }#mermaid-svg-KlQCVM1aHWdwKg9a .activeText0, #mermaid-svg-KlQCVM1aHWdwKg9a .activeText1, #mermaid-svg-KlQCVM1aHWdwKg9a .activeText2, #mermaid-svg-KlQCVM1aHWdwKg9a .activeText3 {fill: black !important; }#mermaid-svg-KlQCVM1aHWdwKg9a .done0, #mermaid-svg-KlQCVM1aHWdwKg9a .done1, #mermaid-svg-KlQCVM1aHWdwKg9a .done2, #mermaid-svg-KlQCVM1aHWdwKg9a .done3 {stroke: grey;fill: lightgrey;stroke-width: 2; }#mermaid-svg-KlQCVM1aHWdwKg9a .doneText0, #mermaid-svg-KlQCVM1aHWdwKg9a .doneText1, #mermaid-svg-KlQCVM1aHWdwKg9a .doneText2, #mermaid-svg-KlQCVM1aHWdwKg9a .doneText3 {fill: black !important; }#mermaid-svg-KlQCVM1aHWdwKg9a .crit0, #mermaid-svg-KlQCVM1aHWdwKg9a .crit1, #mermaid-svg-KlQCVM1aHWdwKg9a .crit2, #mermaid-svg-KlQCVM1aHWdwKg9a .crit3 {stroke: #ff8888;fill: red;stroke-width: 2; }#mermaid-svg-KlQCVM1aHWdwKg9a .activeCrit0, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCrit1, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCrit2, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCrit3 {stroke: #ff8888;fill: #bfc7ff;stroke-width: 2; }#mermaid-svg-KlQCVM1aHWdwKg9a .doneCrit0, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCrit1, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCrit2, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCrit3 {stroke: #ff8888;fill: lightgrey;stroke-width: 2;cursor: pointer;shape-rendering: crispEdges; }#mermaid-svg-KlQCVM1aHWdwKg9a .milestone {transform: rotate(45deg) scale(0.8, 0.8); }#mermaid-svg-KlQCVM1aHWdwKg9a .milestoneText {font-style: italic; }#mermaid-svg-KlQCVM1aHWdwKg9a .doneCritText0, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCritText1, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCritText2, #mermaid-svg-KlQCVM1aHWdwKg9a .doneCritText3 {fill: black !important; }#mermaid-svg-KlQCVM1aHWdwKg9a .activeCritText0, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCritText1, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCritText2, #mermaid-svg-KlQCVM1aHWdwKg9a .activeCritText3 {fill: black !important; }#mermaid-svg-KlQCVM1aHWdwKg9a .titleText {text-anchor: middle;font-size: 18px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a g.classGroup text {fill: #9370DB;stroke: none;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family);font-size: 10px; } #mermaid-svg-KlQCVM1aHWdwKg9a g.classGroup text .title {font-weight: bolder; }#mermaid-svg-KlQCVM1aHWdwKg9a g.clickable {cursor: pointer; }#mermaid-svg-KlQCVM1aHWdwKg9a g.classGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-KlQCVM1aHWdwKg9a g.classGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a .classLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.5; }#mermaid-svg-KlQCVM1aHWdwKg9a .classLabel .label {fill: #9370DB;font-size: 10px; }#mermaid-svg-KlQCVM1aHWdwKg9a .relation {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .dashed-line {stroke-dasharray: 3; }#mermaid-svg-KlQCVM1aHWdwKg9a #compositionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #compositionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #aggregationStart {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #aggregationEnd {fill: #ECECFF;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #dependencyStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #dependencyEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #extensionStart {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a #extensionEnd {fill: #9370DB;stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a .commit-id, #mermaid-svg-KlQCVM1aHWdwKg9a .commit-msg, #mermaid-svg-KlQCVM1aHWdwKg9a .branch-label {fill: lightgrey;color: lightgrey;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .pieTitleText {text-anchor: middle;font-size: 25px;fill: black;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .slice {font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a g.stateGroup text {fill: #9370DB;stroke: none;font-size: 10px;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a g.stateGroup text {fill: #9370DB;fill: #333;stroke: none;font-size: 10px; }#mermaid-svg-KlQCVM1aHWdwKg9a g.statediagram-cluster .cluster-label text {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a g.stateGroup .state-title {font-weight: bolder;fill: black; }#mermaid-svg-KlQCVM1aHWdwKg9a g.stateGroup rect {fill: #ECECFF;stroke: #9370DB; }#mermaid-svg-KlQCVM1aHWdwKg9a g.stateGroup line {stroke: #9370DB;stroke-width: 1; }#mermaid-svg-KlQCVM1aHWdwKg9a .transition {stroke: #9370DB;stroke-width: 1;fill: none; }#mermaid-svg-KlQCVM1aHWdwKg9a .stateGroup .composit {fill: white;border-bottom: 1px; }#mermaid-svg-KlQCVM1aHWdwKg9a .stateGroup .alt-composit {fill: #e0e0e0;border-bottom: 1px; }#mermaid-svg-KlQCVM1aHWdwKg9a .state-note {stroke: #aaaa33;fill: #fff5ad; } #mermaid-svg-KlQCVM1aHWdwKg9a .state-note text {fill: black;stroke: none;font-size: 10px; }#mermaid-svg-KlQCVM1aHWdwKg9a .stateLabel .box {stroke: none;stroke-width: 0;fill: #ECECFF;opacity: 0.7; }#mermaid-svg-KlQCVM1aHWdwKg9a .edgeLabel text {fill: #333; }#mermaid-svg-KlQCVM1aHWdwKg9a .stateLabel text {fill: black;font-size: 10px;font-weight: bold;font-family: 'trebuchet ms', verdana, arial;font-family: var(--mermaid-font-family); }#mermaid-svg-KlQCVM1aHWdwKg9a .node circle.state-start {fill: black;stroke: black; }#mermaid-svg-KlQCVM1aHWdwKg9a .node circle.state-end {fill: black;stroke: white;stroke-width: 1.5; }#mermaid-svg-KlQCVM1aHWdwKg9a #statediagram-barbEnd {fill: #9370DB; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-cluster rect {fill: #ECECFF;stroke: #9370DB;stroke-width: 1px; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-cluster rect.outer {rx: 5px;ry: 5px; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-state .divider {stroke: #9370DB; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-state .title-state {rx: 5px;ry: 5px; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-cluster.statediagram-cluster .inner {fill: white; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-cluster.statediagram-cluster-alt .inner {fill: #e0e0e0; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-cluster .inner {rx: 0;ry: 0; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-state rect.basic {rx: 5px;ry: 5px; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-state rect.divider {stroke-dasharray: 10,10;fill: #efefef; }#mermaid-svg-KlQCVM1aHWdwKg9a .note-edge {stroke-dasharray: 5; }#mermaid-svg-KlQCVM1aHWdwKg9a .statediagram-note rect {fill: #fff5ad;stroke: #aaaa33;stroke-width: 1px;rx: 0;ry: 0; }:root {--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive; }#mermaid-svg-KlQCVM1aHWdwKg9a .error-icon {fill: #552222; }#mermaid-svg-KlQCVM1aHWdwKg9a .error-text {fill: #552222;stroke: #552222; }#mermaid-svg-KlQCVM1aHWdwKg9a .edge-thickness-normal {stroke-width: 2px; }#mermaid-svg-KlQCVM1aHWdwKg9a .edge-thickness-thick {stroke-width: 3.5px; }#mermaid-svg-KlQCVM1aHWdwKg9a .edge-pattern-solid {stroke-dasharray: 0; }#mermaid-svg-KlQCVM1aHWdwKg9a .edge-pattern-dashed {stroke-dasharray: 3; }#mermaid-svg-KlQCVM1aHWdwKg9a .edge-pattern-dotted {stroke-dasharray: 2; }#mermaid-svg-KlQCVM1aHWdwKg9a .marker {fill: #333333; }#mermaid-svg-KlQCVM1aHWdwKg9a .marker.cross {stroke: #333333; }:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-KlQCVM1aHWdwKg9a {color: rgba(0, 0, 0, 0.75);font: ;}生成隨機(jī)系數(shù)矩陣A和常數(shù)項(xiàng)b對數(shù)據(jù)進(jìn)行截?cái)嗍沟脙煞N程序中數(shù)據(jù)完全相等分別用Matlab和Python求解計(jì)算各自誤差值
  • 關(guān)鍵問題一:保證兩種語言處理的數(shù)據(jù)完全一致

這里第二步其實(shí)很重要,由于Matlab默認(rèn)數(shù)據(jù)類型為double,而Python的默認(rèn)類型為float,如果直接粘貼或者導(dǎo)入就有可能在Python中被截?cái)?#xff0c;從而導(dǎo)致在一開始使用的數(shù)據(jù)就存在誤差,使得實(shí)驗(yàn)結(jié)果不可信。

  • 關(guān)鍵問題二:選取合適的指標(biāo)來進(jìn)行對比

第四步主要是計(jì)算兩種程序跑完后均方根誤差:
∥Ax?b∥\|Ax-b\| Ax?b
這種驗(yàn)證方式比較簡單。之所以這么做是因?yàn)閿?shù)值計(jì)算過程中不一定能夠得到100%的精度,這個問題的主要原因是在數(shù)值計(jì)算時數(shù)字不會一直保持為真實(shí)值。尤其在除法時由于數(shù)值長度的限制會被強(qiáng)行截?cái)嘁徊糠?#xff0c;因此用這個指標(biāo)來驗(yàn)證方法是否正確是很有必要的。當(dāng)然,根據(jù)它的定義不難看出,這個值最小精度就越高。

2、數(shù)據(jù)生成和處理

首先由Matlab隨機(jī)生成一個矩陣和一個向量:

A = rand(5,5) b = rand(5,1)

然后在Matlab中將數(shù)據(jù)粘至txt文件,再整理成Python的格式粘生成Numpy數(shù)組,同時也將數(shù)據(jù)重新粘回Matlab代碼。這里原始數(shù)據(jù)是這個樣子:

A的值

0.814723686393179 0.0975404049994095 0.157613081677548 0.141886338627215 0.655740699156587 0.905791937075619 0.278498218867048 0.970592781760616 0.421761282626275 0.0357116785741896 0.126986816293506 0.546881519204984 0.957166948242946 0.915735525189067 0.849129305868777 0.913375856139019 0.957506835434298 0.485375648722841 0.792207329559554 0.933993247757551 0.632359246225410 0.964888535199277 0.800280468888800 0.959492426392903 0.678735154857774

b的值

0.757700000000000 0.743100000000000 0.392200000000000 0.655500000000000 0.171200000000000

當(dāng)然也可以采用round函數(shù)一類的方式進(jìn)行處理。

注意 這種操作雖然看似簡單并且有點(diǎn)笨拙,但能很好地保證二者在初始化時得到的結(jié)果是一樣的。

Matlab的操作相對簡單,直接將txt中的內(nèi)容首尾加上[],再粘回代碼即可。對于Python要稍加處理,最終的代碼是:

import numpy as np A = np.array([0.814723686393179,0.905791937075619,0.126986816293506,0.913375856139019,0.632359246225410,0.0975404049994095,0.278498218867048,0.546881519204984,0.957506835434298,0.964888535199277,0.157613081677548,0.970592781760616,0.957166948242946,0.485375648722841,0.800280468888800,0.141886338627215,0.421761282626275,0.915735525189067,0.792207329559554,0.959492426392903,0.655740699156587,0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774]).reshape([5,5]).Tb = np.array([0.757700000000000,0.743100000000000,0.392200000000000,0.655500000000000,0.171200000000000])

注意這里Python的代碼最后要進(jìn)行一下轉(zhuǎn)置,否則與Matlab的數(shù)據(jù)就就不一致。

整理完成看看數(shù)據(jù)和txt中的形狀就完全一致了:

Aarray([[0.81472369, 0.0975404 , 0.15761308, 0.14188634, 0.6557407 ],[0.90579194, 0.27849822, 0.97059278, 0.42176128, 0.03571168],[0.12698682, 0.54688152, 0.95716695, 0.91573553, 0.84912931],[0.91337586, 0.95750684, 0.48537565, 0.79220733, 0.93399325],[0.63235925, 0.96488854, 0.80028047, 0.95949243, 0.67873515]])barray([0.7577, 0.7431, 0.3922, 0.6555, 0.1712])

這里b變成了一維數(shù)組但不影響計(jì)算。

3、求解方程組
  • Matlab部分

用Matlab求解線性方程組十分簡單,直接一個反除號就可以搞定:

>> x = A \ bx =-0.84093.77013.8572-8.00502.4445

注意這里x跑出來的值只是顯示值,實(shí)際值的位數(shù)是遠(yuǎn)大于這個值的:

-0.840928749143009 3.77006972003583 3.85716025378275 -8.00495386938441 2.44448015270832
  • Python部分

用Python求解線性方程組的方式其實(shí)也很多,最簡單的辦法就是直接用scipy庫的linalg模塊中的solve方法:

from scipy.linalg import solvex = solve(A,b)xarray([-0.84092875, 3.77006972, 3.85716025, -8.00495387, 2.44448015])

為了更準(zhǔn)確地對比數(shù)值的精度,我們將x的值用np.savetxt函數(shù)保存至文件再看具體數(shù)字:

-8.409287491430091910e-01 3.770069720035832184e+00 3.857160253782746739e+00 -8.004953869384410226e+00 2.444480152708315313e+00

仔細(xì)觀察發(fā)現(xiàn),Python輸出的數(shù)值位數(shù)要稍多一些,這是因?yàn)槲覀冇肕atlab粘貼的時候它默認(rèn)顯示的位數(shù)不太一樣。

注:這也是為什么我們一定要在最開始進(jìn)行數(shù)據(jù)統(tǒng)一規(guī)范的原因。Matlab在存儲變量時數(shù)據(jù)是保存了完整的位數(shù)的,但即便從變量查看窗口粘出來的數(shù)值也不一定是完整的數(shù)字。

4、精度驗(yàn)證
  • Matlab部分
error = norm(A*x-b)error =1.5801e-15% 查看15位 % 1.580118849929844e-15
  • Python部分
np.sqrt(np.sum((A.dot(x)-b)**2))1.580118849929844e-15

注意,由于兩個數(shù)的量級都是1e-15,因此這里只需要看它們各自前16位即可。仔細(xì)觀察不難發(fā)現(xiàn),兩個程序得到的結(jié)果完全一致。

這里我們把有效數(shù)字從第一位到最后一位排列直接放出來對比

# python 1580118849929843973242195223453751011511480618378089335607228349545039236545562744140625 % matlab 1580118849929843973242195223453751011511480618378089335607228349545039236545562744140625

肉眼觀察信不過,全部放入Python字符串試試對不對:

#第一行數(shù)字(python結(jié)果): s1 = '1580118849929843973242195223453751011511480618378089335607228349545039236545562744140625'#第二行數(shù)字(matlab結(jié)果): s2 = '1580118849929843973242195223453751011511480618378089335607228349545039236545562744140625'

判斷一下是否相等:

s1 == s2True

搞定!

5、結(jié)論

Python(Numpy, Scipy)的數(shù)值精度與Matlab是完全一致的。

其本質(zhì)的原因來自于二者在矩陣計(jì)算都是使用的LAPACK, 詳情可見:
Matlab和Python(Numpy,Scipy)與Lapack的關(guān)系

總結(jié)

以上是生活随笔為你收集整理的深度对比Python(Numpy,Scipy)与Matlab的数值精度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品视频久久久久 | 老司机一区二区 | 国产网站入口 | 噼里啪啦免费看 | 无码人妻久久一区二区三区 | 在线观看免费观看在线 | 久久一区二区精品 | 人人爱爱 | 欧美亚洲中文精品字幕 | 猛1被调教成公厕尿便失禁网站 | www.88av | 欧美黄色免费在线观看 | 免费视频www在线观看网站 | 国产成人在线观看免费 | 久久久久在线观看 | 女同一区二区 | 日韩欧美精品久久 | 欧美 丝袜 自拍 制服 另类 | 天天色天天草 | 国产盗摄一区二区三区在线 | 久久久国产精品无码 | 日韩xxx视频 | 免费av手机在线观看 | 国产在线视频自拍 | 色欲av无码一区二区三区 | 中文字幕高潮 | 一区二区在线视频播放 | 国产又粗又长又黄的视频 | 日韩精品无码一本二本三本色 | 午夜影院18 | 麻豆视频国产精品 | 日韩网站视频 | 99久久久国产 | 天天干天天操天天射 | jvid乐乐 | 亚洲色图一区二区 | 总裁憋尿呻吟双腿大开憋尿 | 麻豆电影网站 | 伊人国产一区 | 成人av免费播放 | 日韩黄色一级视频 | 日韩欧美一区在线观看 | 白嫩白嫩国产精品 | 玖玖综合网 | 国产激情福利 | 青青在线视频 | 日韩精品一区二区在线 | 国产一区精品在线 | 黄色片在哪看 | 亚洲一二三四在线 | 伊人三级 | 一区二区三区不卡在线 | 男生插女生的视频 | 久久久视屏 | 奇米狠狠操 | 古装做爰无遮挡三级聊斋艳谭 | 亚洲色欧美| 艹少妇视频 | 国产 福利 在线 | 亚洲综合免费 | 国语对白精彩对话 | 欧美性大战久久久久久 | 爱情岛论坛av | 在线观看aa| 欧美一级性生活视频 | 黄a在线| 欧美有码在线观看 | 国产欧美一区二区 | 亚洲一线视频 | 午夜精品在线播放 | 性chinese天美传媒麻 | 久久性生活片 | 久久99精品久久久久久水蜜桃 | 色婷婷www | 日日操夜夜操狠狠操 | 成年人网站免费在线观看 | 神马香蕉久久 | 成人a毛片 | 久久九九爱 | 久久久久久久综合色一本 | 国产精品毛片va一区二区三区 | 91免费播放| 久久黄色影视 | 在线国产精品一区 | 91爱视频 | 天堂在线亚洲 | 一区视频在线播放 | 日本加勒比中文字幕 | 国产美女被草 | 黄色片小视频 | 老司机精品视频网站 | 爆乳熟妇一区二区三区霸乳 | 欧美一区二区在线看 | 天堂网中文在线观看 | 亚洲精品av中文字幕在线在线 | 国产乱码77777777 | 三级网站免费看 | 精品久久久国产 | 色视频线观看在线播放 |