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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Eigen求解数学问题(一)

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eigen求解数学问题(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Eigen求解數學問題(一)

  • 有這樣的一個問題:
    • 求解過程:
    • 利用Eigen 求解:
    • 輸出
    • 總結:

有這樣的一個問題:

三個朋友A,B,C各飼養家禽,A養雞,B養鴨,C養兔.
他們同意按照下面的比例分享各人飼養的家禽:
A得雞的1/3,鴨的1/3,兔的1/4;
B得雞的1/6,鴨的1/3,兔的1/2;
C得雞的1/2,鴨的1/3,兔的1/4;

要求他們分享家禽之后所獲得的收益與他們各自飼養家禽的
收益相等.同時各戶的最高收益是二千元,則每戶確定他們各
自的收益是多少?要求:
(1)列出問題的數學模型,并算出最終他們三人應得的收益;
(2)試寫出相應的Eigen求解代碼.

求解過程:

根據協議中每人分享飼養后總收益與各自飼養相等的原則,
分別考慮A、B及C的總收益.設他們三人應得收益分別為x1,x2,x3



盡管這一問題是在方程組的無窮多組解中尋求解答,但是由
于題目條件限制,對于參數k,沒有更多的選擇余地.
為了確定滿足條件,x3=2000,故取k=2000,得:
x1 =1743, x2 = 1928, x3 = 2000
即他們三人的收益各自是1743元,1928元,2000元.

利用Eigen 求解:

1、在Qt 建立console控制臺工程,在.pro 文件中添加 路徑引用:INCLUDEPATH+=C:\Qt\Qt5.13.2\Tools\eigen\Eigen;

2、在.app 文件中添加如下代碼:

#include<math.h> #include <Eigen> #include<iostream> using namespace Eigen; using namespace std;

3、主要關鍵代碼:

/*三個朋友A,B,C各飼養家禽,A養雞,B養鴨,C養兔. 他們同意按照下面的比例分享各人飼養的家禽: A得雞的1/3,鴨的1/3,兔的1/4; B得雞的1/6,鴨的1/3,兔的1/2; C得雞的1/2,鴨的1/3,兔的1/4;要求他們分享家禽之后所獲得的收益與他們各自飼養家禽的 收益相等.同時各戶的最高收益是二千元,則每戶確定他們各 自的收益是多少?要求: (1)列出問題的數學模型,并算出最終他們三人應得的收益; (2)試寫出相應的Eigen求解代碼.求解: 將三個等式聯立,可得描述實際問題的方程組.1/3 *x1 + 1/3 *x2 + 1/4 *x3 = x1 1/6 *x1 + 1/3 *x2 + 1/2 *x3 = x2 1/2 *x1 + 1/3 *x2 + 1/4 *x3 = x3即:-2/3 *x1 + 1/3 *x2 + 1/4 *x3 = 0 1/6 *x1 - 2/3 *x2 + 1/2 *x3 = 0 1/2 *x1 + 1/3 *x2 - 3/4 *x3 = 0 d*/int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);MatrixXd mat(3,3);Vector3d b ;mat << -2/3.0, 1.0/3, 1.0/4,1.0/6, -2.0/3, 1.0/2,1.0/2, 1.0/3, -3.0/4;cout << "Here is the matrix mat:\n" << mat << endl;// This assignment shows the aliasing problem// mat.bottomRightCorner(2,2) = mat.topLeftCorner(2,2);// cout << "After the assignment, mat = \n" << mat << endl;b << 0, 0, 0;//mat.nul;FullPivLU<MatrixXd> lu(mat);MatrixXd A_null_space = lu.kernel(); //求零空間MatrixXd::Index maxRow,maxCol; //定義變量cout << "The A_null_space is:\n" << A_null_space<< endl; //輸出零空間向量A_null_space.maxCoeff(&maxRow,&maxCol); //獲取最大向量MatrixXd Xn = 2000/(A_null_space(maxRow,maxCol)) * A_null_space; cout << "The Xn is:\n" << Xn<< endl; // 輸出求解。return a.exec(); }

輸出

總結:

Eigen是C++中可以用來調用并進行矩陣計算的一個庫,簡單了說它就是一個c++版本的matlab包。最近項目開發中要用到矩陣的相關操作,找了些相關的數學問題來具體操作練練,這樣的學習或許可以比較快的掌握Eigen庫。 Eigen中提供了求解線性方程組的各種分解方法,但是對零空間向量的求解筆者也是費盡周折在琢磨出來。在學習Eigen庫的過程中,除了對官方手冊進行比較的中文注釋外,我想最重要的還是莫過于多練習了。順便可以將線性相關的數學內容溫習溫習。 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Eigen求解数学问题(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。