공동

2016-06-14 4 views
-4

I는 도끼 = B와 방정식은 다음 11x11 선형 시스템 가지고공동

A = { 
{1.0000000000000000, 8.0000000000000000, 6.0000000000000000, 12.0000000000000000, 24.0000000000000000, 24.0000000000000000, 8.0000000000000000, 6.0000000000000000, 24.0000000000000000, 24.0000000000000000, 24.0000000000000000}, 
{4.5999999999999996, 41.8531411531233601, 33.0479488942856037, 87.8349057232554173, 149.3783917109033439, 195.3689938163366833, 121.0451669808013690, 48.8422484540841708, 223.6406089026404516, 851.8470736603384239, 269.3015780207464900}, 
{21.1599999999999966, 218.9606780479085160, 182.0278210198854936, 642.9142219510971472, 929.7459962556697519, 1590.3768227003254196, 1831.4915561762611560, 397.5942056750813549, 2083.9634145976574473, 30235.1432043200838962, 3021.8058301860087340}, 
{97.3359999999999701, 1145.5240206653393216, 1002.6076877338904296, 4705.8591727678940515, 5786.8317341801457587, 12946.2633183243797248, 27711.6501551604087581, 3236.5658295810949312, 19419.1186238102454809, 1073154.9275125553831458, 33907.3782725576675148}, 
{447.7455999999998539, 5992.9723163999815370, 5522.3546042079124163, 34444.8913989153879811, 36017.8173980603314703, 105387.4349242659372976, 419295.1650431178859435, 26346.8587310664843244, 180954.3130575636751018, 38090161.8577392920851707, 380471.2698060897528194}, 
{0.0000000000000000, 34.2801357124991952, 168.4702728821191613, 2101.6181209908259007, 1236.1435394200643714, 6631.0420254749351443, 38374.2674650820554234, 4069.0485156323466072, 28291.8793721561523853, 7044717.1197200166061521, 60211.4334496619121637}, 
{2059.6297599999993508, 31353.0895356311411888, 30417.0821226643129194, 252121.9823892920394428, 224178.4848274685500655, 857893.2134182706940919, 6344206.6583608603104949, 214473.3033545676735230, 1686197.1981563565786928, 1351958038.0734937191009521, 4269229.7229307144880295}, 
{0.0000000000000000, 179.3414198404317403, 927.9328280691040618, 15382.9524602928686363, 7693.8805767663707229, 53979.1670196200575447, 580627.4516345988959074, 33123.5797620395824197, 263633.8804078772664070, 250042569.2999326586723328, 675626.4184535464737564}, 
{0.0000000000000000, 938.2502198978935439, 5111.0461132262771571, 112596.6815912620077142, 47887.4794405465727323, 439410.6478194649680518, 8785268.3545934017747641, 269638.3520710353623144, 2456635.0642409822903574, 8874917956.1941699981689453, 7581135.8600852200761437}, 
{0.0000000000000000, 938.2502198978935439, 0.0000000000000000, 56298.3407956310038571, 23943.7397202732863661, 319571.3802323381532915, 8785268.3545934017747641, 0.0000000000000000, 269630.6777825467870571, 3293783983.7421655654907227, 1735440.7390556528698653}, 
{0.0000000000000000, 70.9608494071368625, 1546.2151390406352220, 34063.2210755480555235, 13279.8613116998949408, 129911.1650312914862297, 2657756.2850107550621033, 183537.2854802548536099, 1654054.3836708476301283, 5487391301.6329326629638672, 5049794.3807012736797333} 
}; 


b = {1, 6.167551546217714, 39.66265463865314, 267.9960092725794, 1918.2310370808632, 137.49061855461255, 14662.396462231256, 1216.4598834815756, 11424.520672986631, 3808.17355766221, 6082.299417407878}; 

매트릭스 명확 악조건되어, 정확한 솔루션이 발견 될 수 있지만 mathematica :

x = {0.0775277, 0.00771443, 0.087553, 0.0208838, 8.47931*1e-7, 0.00197285, 0.0000611365, 0.00187375, 0.000283606, 3.82771*1e-9, 0.000788588}; 

이제는 C 프로그램 내에서 이와 유사한 매트릭스를 사용하여 시스템을 해결하고 싶습니다. 나는 특히, 방정식의 선형 시스템을 해결하기위한 거의 모든 LAPACK 기능을 시도 :

  • dgesv
  • dsgesv
  • dgels
  • dgelss
  • dgelsy

하지만, 모두 심각하게 잘못된 결과를줍니다.

이 시점에서 프로그래밍 된 관점에서 오타/실수가있을 것으로 예상하지 않습니다. 올바른 조건의 매트릭스를 사용하여 올바른 결과를 얻을 수 있기 때문입니다. 뭔가 개념적으로 또는 아마도 다른 도구를 사용해야 할 것 같아요. 수학 라이브러리에서 몇 가지 루틴으로 올바른 솔루션을 찾을 수있는 방법이 있습니까?

+2

대신 당신은 ** ** 문제를 해결하기 위해 * LAPACK의 *를 사용하려고하는 방법을 게시해야 완전히 불필요합니다. 또한, 결과가 잘못되었다는 것을 안다면, 다른 방법으로 이것을 해결할 수 있어야합니다. 왜 [tag : c]에 넣고 싶습니까? –

+1

수학 질문에 프로그래밍 질문이 아닙니다. – kangshiyin

답변

1

일반적으로 잘못 정의 된 1 차 방정식을 푸는 것은 어렵습니다. 적어도 한 단계의 LAPACK API를 사용하여 만족스러운 숫자 오류가있는 대답을 얻을 수는 없습니다.

좋은 시작으로 자른 SVD 방법을 사용하면 수치 적으로 안정적인 결과를 얻을 수 있습니다.

https://en.m.wikipedia.org/wiki/Linear_least_squares_(mathematics)

이 방법은 가장 계산적으로 집약적이지만, 정규 방정식의 행렬 XTX가 매우 악조건의 경우에 특히 유용하다 (즉, 그 조건 수는 시스템의 상대 반올림 곱한 경우 오류는 상당히 크다). 이 경우 역변환에서 가장 작은 특이 값을 포함하면 솔루션에 수치 적 노이즈가 추가됩니다. 특정 임계 값 이하의 모든 특이 값을 명시 적으로 0으로 설정하고이를 무시함으로써 요소 분석과 밀접한 관련이있는 프로세스 인 잘린 SVD 접근법으로 치료할 수 있습니다.

더 효과적인 방법은 사전 컨디셔닝 매트릭스를 찾아서 해결하기 전에 매트릭스를 잘 조절하는 것을 포함 할 수 있습니다. 원래 매트릭스의 구조에 대해 어느 정도 이해해야합니다. 다음 토론에서 더 많은 아이디어를 찾을 수 있습니다. 이 경우에 값을 게시

https://www.researchgate.net/post/How_can_I_solve_an_ill-conditioned_linear_system_of_equations