x, (1 + x)^4 = 34.5에 대해이 방정식을 해결하십시오. 나는 당신이 사용할 수학 라이브러리에 관심이 있습니다. C에서 같은 것을 해결 방정식 훨씬 간단C++/C에서 x에 대한이 수학 방정식을 어떻게 풀 수 있습니까?
(1 + X)^4 = 34.5
감사
x, (1 + x)^4 = 34.5에 대해이 방정식을 해결하십시오. 나는 당신이 사용할 수학 라이브러리에 관심이 있습니다. C에서 같은 것을 해결 방정식 훨씬 간단C++/C에서 x에 대한이 수학 방정식을 어떻게 풀 수 있습니까?
(1 + X)^4 = 34.5
감사
당신은 더 복잡한 다항식에 대한보다 강력한 솔루션을 필요로 하겠지만,이 숙제를 끝내지 충분 될 수 있습니다.
이 알고리즘은 Newton's Method을 사용하며 Ruby로 작성되었습니다. wolfram|alpha을 사용하여 미분과 해답이 올바른지 확인할 수 있습니다.
def f(x,a,b,c)
return x*(x+a)**b-c
end
def df(x,a,b,c)
return (x+a)**b+b*x*(x+a)**(b-1)
end
def newton(a,b,c)
xn=0 #initial seed for Newton's method
while true
xn2=xn-f(xn,a,b,c)/df(xn,a,b,c) #Newton's method
print "f(%.5f)=%.5f\n"%[xn,f(xn,a,b,c)]
break if (xn2*10000).to_i==(xn*10000).to_i #set desired precision here
xn=xn2
end
print "root is %.5f"%[xn2]
end
newton(1,4,34.5)
이 생성 :
f(0.00000)=-34.50000
f(34.50000)=54793902.65625
f(27.44093)=17954483.09402
f(21.79391)=5883122.74717
f(17.27661)=1927672.51373
f(13.66318)=631598.66717
f(10.77301)=206926.07160
f(8.46171)=67782.26596
f(6.61400)=22194.34671
f(5.13819)=7259.61867
f(3.96214)=2367.67791
f(3.03097)=765.73665
f(2.30728)=241.54928
f(1.77466)=70.68568
f(1.43951)=16.48341
f(1.30101)=1.97186
f(1.27945)=0.04145
f(1.27897)=0.00002
root is 1.27897
wolfram 알파에 멋진 일, 그리고 시원한 링크 – jrhicks
끔찍한, 아무도 여기 파이썬을 말하지 않는다 ... – vehomzzz
it 's Ruby , 안드레이. – avguchenko
손으로 그것을 해결 다르지 될 수 없습니다; 상징적 인 수학 (Mathematica?)에 더 적합한 시스템을 사용하는 것이 더 쉽습니다. A similar question 최근에 물었다.
나는 이것을 놓쳤다. 나는 다른 CAS 라이브러리에 대한 언급이 있음을 알았다. – MaD70
당신은 숫자로 의미를 해결합니까? Newton–Raphson 구현이 간단하기 때문에 "math.h"와 함께 C 런타임을 사용합니다. 사실, 허용 가능한 오류 크기, 성능 등과 같은 요구 사항을 명시해야합니다. 그러면 라이브러리 선택이 축소됩니다.
"해결"의 의미에 달려 있습니다.
"이 기계의 부동 소수점 정확도의 한계에 대한 방정식을 만족하는 double x의 값을 찾으십시오"라는 의미라면 Luiscencio의 접근 방식이 좋습니다.
"x가 주어진 방정식을 만족시키는 'x ='형태의 방정식을 찾으면"(AKA "대수적으로 해결") C 나 C++ 모두 도움이되는 라이브러리가 없습니다. Carl이 언급했듯이 손으로 직접 계산하거나 Mathematica 또는 비슷한 상징적 인 수학 패키지를 사용해야합니다.
그 중 하나와 다른 의미가있는 경우 다시 질문하십시오.
당신은 자신과 모순됩니다. "C 나 C++도 도움이되는 라이브러리가 없습니다." -> "또는 유사한 기호 수학 패키지"를 사용하십시오. 프로그래밍 방식으로 수행해야하는 경우 후자가 정답입니다. – rmeador
일반적으로 이러한 "유사한 상징적 인 수학 패키지"는 c/C++ 라이브러리가 아닙니다. 그것들은 독립 실행 형 응용 프로그램입니다. – Alan
앨런은 내가 의미하는 바를 정확하게 설명했습니다. 언어의 일부인 소위 "수학 라이브러리"는 대개 산술 및 제곱근, 로그, 삼각 함수 등과 같은 다양한 기능에 실제로 사용됩니다. 상징적 인 해결은 일반적으로 지원되지 않는다. (나는 결코 말하지 않을 것이다. 그러나 누군가 이상한 학업 언어로 나를 틀리게 증명할 것임) – Berry
I는 다른 응답 이후 용액 방정식의 사소한 재 배열되기 때문에이 문제는 대폭 변경되었음을 가정하고 :
X = 34.5가^(1/4) - 코드 1
:
double x = pow(34.5, 1.0/4.0) - 1 ;
일반적으로 솔루션을 잃어 버릴 수 있기 때문에 변수가 포함 된 요소의 뿌리를 가져 오는 것은 바람직하지 않습니다. 이 특정 예에서 다항식은 두 개의 해를 가졌지 만 메서드는 단 하나만 찾습니다. – avguchenko
@avguchenko : 그것에 대해 솔직하게 말하면 두 가지 실제 솔루션과 두 가지 복잡한 솔루션이 있습니다. – Pillsy
동의. 질문 (아마 편집 후)은 질문이 '훨씬 더 간단하다'고 말합니다 (단지 외쳤습니다). 내가 궁금해하는 것보다 훨씬 간단 해? 그리고 왜 지금은 훨씬 더 간단합니까? 이것은 '훨씬 더 단순한'대답입니다.) – Clifford
이것은 더 간단한 기능입니다. 그것은 또한 우리가 모든 뿌리를 찾을 수 있도록 여러 가지 씨앗을 가지고 있습니다.
# solve (x+a)^b=c
def f(x,a,b,c)
return (x+a)**b-c
end
def df(x,a,b,c)
return b*(x+a)**(b-1)
end
def newton(a,b,c)
roots=[]
for seed in [-100000, -100, -1,1,100, 100000] # set initial guesses here
print "\n with seed %d\n"%[seed]
root=newton_root(seed,a,b,c)
if root and not roots.include?(root)
roots << root
end
end
return roots
end
def newton_root(xn,a,b,c)
while true
if (df(xn,a,b,c)).abs<0.000001 # give up with this seed if derivative is too low
print " gave up on this seed\n"
return nil
end
xn2=xn-f(xn,a,b,c)/df(xn,a,b,c)
# print " f(%.5f)=%.5f\n"%[xn,f(xn,a,b,c), xn2]
if (xn2*10000).to_i==(xn*10000).to_i # set precision here
rounded_xn=(xn2*10000).to_i/10000.0
print " found root %0.5f\n"%[rounded_xn]
return rounded_xn
else
xn=xn2
end
end
end
print newton(1,4,34.5).inspect
이 생성 :
with seed -100000
found root -3.42350
with seed -100
found root -3.42350
with seed -1
gave up on this seed
with seed 1
found root 1.42350
with seed 100
found root 1.42350
with seed 100000
found root 1.42350
[-3.4235, 1.4235]
X1 = 34.(5)^(1/4) - 1
X2 = -34.5^(1/4) - 1
// #INCLUDE < math.h>
이중 X1 = SQRT (SQRT (34.5)) - 1 ;
double x2 = -sqrt (sqrt (34.5)) - 1;
그것들은 두 가지 실제 해결책이지만 거기에도 복잡한 공액이 있습니다. – duffymo
(1 + X)^4 = 34.5
(1 + X)^2 = SQRT (34.5) = +/- 5.87367
1 + X = SQRT (SQRT (34.5)) = +/-
X = 1.423557 2.42357 와 X = -3.42357
을 확인
01 다른 사람이 언급했듯이 23,516,(1 + 1.423557)^4 = 34.4995
(1 + -3.42357)^4 = 34.500이
(이 체크) (는 체크), 당신의 질문은 명확하지 않습니다. 상징적으로
첫 번째 종류의 방법은 numerical analysis입니다.
두 번째 종류의 방법은 Computer Algebra Systems (CAS)라고하는 소프트웨어 용으로 개발되었습니다. 이 목적으로 개발 된 C++에는 하나 이상의 라이브러리가 있습니다 (GiNaC).
또한 Carl Norummentioned으로, similar question은 최근에 다른 CAS 라이브러리가 답변에 인용되어 있는지 묻습니다.
문제를 설명 할 때 * 많이 * 더 잘해야합니다. 그 방정식의 해답을 찾고 있다면 펜과 종이를 사용하십시오! 당신이 도서관 상태를 요구한다면! – sellibitze