Monday, July 27, 2009

Integrate series part 4: TRIGONOMETRIC INTEGRAL

จากบทที่สอน sub u ไปจะเห็นได้ว่าถ้าเราอยากหา ∫(sinx)^2 cosx dx เราก็ sub u ให้ sinx เป็น u ก็จะได้คำตอบออกมา
แต่ในกรณีที่ expression มันมีกำลังเยอะขึ้นเช่น ∫(sinx)^2 (cosx)^3 dx หรือ ∫(sin2x)^4(cos2x)^4 dx แค่ sub u ธรรมดาจะไม่ได้แล้วจึงมี guideline ในการ integrate trigonometric expression ให้

สูตรที่ควรรู้
(cosx)^2+(sinx)^2 = 1
(cosx)^2 = (1+cos(2x))/2
(sinx)^2 = (1-cos(2x))/2 -----2 สูตรหลังจำว่า cos เหมือนกันเลยเป็นบวก sin ไม่เหมือนเป็นลบ

วิธี
1. ดูว่าตัวไหนมีกำลังเป็นเลขคี่ให้เปลี่ยนเป็นอีกตัวโดยใช้สูตรแรกเช่น
∫(sinx)^2 (cosx)^3 dx ---- cos มีกำลังเลขคี่ดังนั้นเปลี่ยน
(cosx)^3 = (1-(sinx)^2) (cosx) ---เหลือไว้หนึ่งตัวเพื่อให้ sub u
= ∫(sinx)^2 (1-(sinx)^2) (cosx) dx
2. ทีนี้ก็สามารถ sub u ธรรมดาได้แล้ว
u = sinx, du = cosx dx
= ∫u^2(1-u^2)du
= u^3/3 - u^5/5 +C
1/3(sinx)^3 - 1/5(sinx)^5 +C

ในกรณีที่ทั้งคู่เป็นกำลังคู่ให้เปลี่ยนทั้งหมดโดยใช้ 2 สูตรล่างเช่น
∫(sin2x)^4(cos2x)^4 dx
= ∫((1-cos4x)/2)^2 ((1+cos4x)/2)^2 dx
= 1/16 ∫(1-cos4x)^2 (1+cos4x)^2 dx ---(a-b)(a+b) = a^2-b^2
= 1/16 ∫(1-(cos4x)^2)^2 dx --- กระจายออกมาได้
= 1/16 ∫1-2(cos4x)^2+(cos4x)^4 dx
= 1/16x + 1/16∫-2(cos4x)^2+(cos4x)^4 dx ---cos 2 ตัวที่ติดกำลังคู่อยู่ก็ต้องใช้สูตรเพื่อลดกำลังอีกครั้ง(และสองครั้งสำหรับกำลัง 4) จนได้ผลลัพธ์ในท้าย
ทำต่อจะได้คำตอบ = 1/16(3x/8-1/16(sin8x)+1/128(sin16x) +C

Thursday, July 23, 2009

Integrate series part 3: BY PART

การ integrate by part เป็นวิธีที่ใช้เวลามี 2 expression มาคูณกัน ส่วนใหญ่ expression จะเป็นระหว่างประเภทต่อไปนี้
Logarithmic (ln, log)
Inverse Trigon (inverse ของ sin cos tan)
Algebraic(2x^2 เป็นต้น)
Trigonometric (sin cos tan)
Exponential (e^x, 4^2x)

วิธีนี้เป็นวิธีที่คนได้ยินแล้วถอนหายใจมากที่สุดเพราะ
1. มีสูตรที่ต้องจำ
2. ทำยาววว
3. ไม่รู้จะแทนตัวไหนในสูตร
เพราะงั้นถ้าแก้ทั้ง 3 ข้อนี้ได้ by part ก็ง่ายนิดเดียว

สูตร ∫u dv = uv - ∫v du
- ท่องครับ จำสูตรไม่ได้เท่ากับจบ
วิธีทำ
1. กำหนด u และ dv
ดูตาม list ข้างบนแล้วดูว่า
อันไหนมาก่อนให้เป็น u อันหลังเป็น dv
เช่น ∫x^2(e^2x) dx ในที่นี้ x^2 เป็น algebraic มาก่อน e^2x ซึ่งเป็น exponential
เพราะฉะนั้น x^2 เป็น u, e^2x dx เป็น dv
2. หา du และ v
du = diff(x^2) = 2x dx
v = ∫dv = ∫e^2x dx = 0.5e^2x
3. แทนทั้ง 3 ตัวลงในสูตร
(x^2)(0.5e^2x) - ∫(0.5e^2x)2x dx
ในที่นี้ integral ข้างหลังยังต้องทำ by part อีก
รอบเพราะ integrate แบบธรรมดาไม่ได้
**คำตอบสุดท้ายอย่าลืม + C

อีกหนึ่งตัวอย่าง
∫ln(x^2) dx
∫u dv = uv - ∫v du
1. u = ln(x^2) ***ln(x^2) ถือเป็นหนึ่ง expressionนะ !
dv = dx
2. du = diff(ln(x^2)) = 2x/(x^2) = 2/x dx***chain rule ลืมรึยัง
v = ∫ dx = x
3.ln(x^2)x - ∫ x(2/x) dx
= xln(x^2) - 2x +C

สูตรลัด!!
ใช้ได้กับเฉพาะกรณีที่ต้องทำ by part หลายๆรอบเช่น ข้อแรก
ตัวอย่าง ∫(x^3+2x)e^2x dx
1. วาดตารางขึ้นมา
ให้ u อยู่ฝั่งซ้าย diff แล้วเขียนบรรทัดล่างลงมาเรื่อยๆจนเป็น 0 *** ถ้าไม่เป็น 0 แสดงว่าวิธีนี้ใช้ไม่ได้
ให้ dv อยู่ฝั่งขวา integrate เรื่อยจนถึงบรรทัดที่ข้างซ้ายเป็น 0
2. วาดลูกศรเหมือนรูปข้างล่าง
3. ลูกศรแต่ละอันให้เขียนกำกับบวกลบสลับกัน
4. หัวกับท้ายลูกศร เอามาคูณกัน เครื่องหมายบนลูกศรคือ เครื่องหมายที่ใช้ทำกับตัวต่อไป


แค่นี้ integrate by part ก็ไม่ยากอีกต่อไป !!!

Computer Programming (C language) – Guide to Loop

เนื่องจากมีหลายคนชอบถามและมักจะงงกับการทำงานของ loop กันมาก โดยเฉพาะ loop ซ้อน loop เลยเขียนบทความนี้ขึ้นมา
- Loop เป็นฟังก์ชั่นที่มีประโยชน์มากในการคำนวณที่ต้องใช้สมการ
ซ้ำๆ เช่น while, for, do...while
- ส่วนประกอบสำคัญของ loop
1. initial
2. condition
3. increment or decrement
รูปแบบทั่วไปของ loop

for(initial;condition;increment or decrement){
statement
}

initial
while(condition){
statement
increment or decrement
}

initial
do{
statement
increment or decrement
}while(condition);

- วิธีการเขียนโปรแกรมโดยใช้ loop
1. เขียน flow chart ของโปรแกรม วิธีนี้จะทำให้เราเข้าใจได้เร็ว และผิดพลาดน้อย แต่ช้า เหมาะสำหรับผู้เริ่มต้น
2. คิดโปรแกรมที่จะเขียนแล้วเขียนในรูปของภาษาซีเลย วิธีนี้อาจจะยากสำหรับผู้เริ่มต้น และโปรแกรมที่ซับซ้อน
เมื่อเขียนโปรแกรมเสร็จแล้วควรเช็คว่าโปรแกรมเราถูกต้องหรือไม่ โดยการสมมติค่าขึ้นมาและไล่ทำตามคำสั่งที่เราเขียนทีละบรรทัดๆ การตรวจสอบแบบนี้ทำให้เราสังเกตเห็นข้อผิดพลาดของโปรแกรมได้ง่ายว่าขาดตกจุดไหน

โปรแกรมที่แนะนำในการฝึกเขียน
1. user ใส่เลข 3 ค่า จงแสดงผลค่าที่มากที่สุด
2. user ใส่เลข 3 ค่า จงแสดงผลการเรียงลำดับจากน้อยไปมาก
3. program คำนวณเลขยกกำลัง โดย user ใส่ทั้งเลขฐาน และเลขยกกำลัง เช่น
ใส่เลขฐาน 3 กับเลขยกกำลัง 4 โปรแกรมจะแสดงผล
81
4. (ยากมากๆ) program ที่สามารถบอกได้ว่าเลขจำนวนเต็มที่ user ใส่เข้าไป 1 จำนวนเป็นจำนวนเฉพาะหรือไม่ เช่น
ใส่เลข 5 แสดงผลว่า
5 เป็นจำนวนเฉพาะ // เพราะ 5 มีตัวประกอบเพียง 2 ตัว ได้แก่ 1 และ 5
ใส่เลข 12 แสดงผลว่า
12 ไม่เป็นจำนวนเฉพาะ //เพราะ 12 มีตัวประกอบ 1 2 3 4 6 12
5. (ยาก) user ใส่เลขจำนวนเต็ม ให้แสดงผลเป็นรูปปิรามิด เช่น
ใส่เลข 4 โปรแกรมจะแสดงผล
1
1 2
1 2 3
1 2 3 4
6. (ยาก) user ใส่เลขจำนวนเต็ม ให้แสดงผลเป็นรูปปิรามิด เช่น
ใส่เลข 4 โปรแกรมจะแสดงผล
1
2 1
3 2 1
4 3 2 1

แนะนำการเขียนแต่ละข้อ (บางข้ออาจทำได้หลายวิธี)
*****SPOILER ALERT***** (ลากแถบสีเพื่อดู)
1. ใช้ if + ระวังเรื่องตัวเลขซ้ำ 2 หรือ 3 ตัว เช่น ใส่ค่า 12 14 12 หรือ 6 6 6
2. ใช้ if ในการเปรียบเทียบทั้ง 3 ค่า
3. ใช้ loop function โดย condition เป็นเลขยกกำลัง
4. (ยากมากๆ) ใช้ if และ loop ซ้อน loop (มี initial เริ่มที่ 2 ถึง n-1 [n=เลขที่ user ใส่])
5. (ยาก) loop ซ้อน loop (loop นอกกำหนดว่ามีกี่บรรทัด ส่วน loop ในกำหนดว่าแต่ละบรรทัดให้แสดงผลเลขอะไรบ้าง)
สำหรับโปรแกรมในข้อ 5:
int x,i,j;
scanf("%d",&x);
for(i=1;i<=x;i++){
for(j=1;j<=i;j++)
printf("%d ",j);
printf("\n");
}
6. (ยาก) คล้ายข้อ 5 แต่เปลี่ยนตัวอะไรนิดหน่อย
สำหรับโปรแกรมในข้อ 6
int x,i,j;
scanf("%d",&x);
for(i=1;i<=x;i++){
for(j=1;j<=i;j++)
printf("%d ",j);
printf("\n");
}

*************** จบ Guide to Loop ***************