পাঠ ৪১ · ৫৭-এর মধ্যে · মডিউল ৮
Home / Courses / Numerical Methods / প্রয়োগ — ভাইব্রেশন ও PCA

প্রয়োগ — ভাইব্রেশন, স্ট্যাবিলিটি ও PCA-এর সংযোগ

Applications — vibration, stability & the PCA connection
১১ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • কীভাবে একটি মেকানিক্যাল সিস্টেমের ভাইব্রেশন মোড ও ন্যাচারাল ফ্রিকোয়েন্সি আইগেনভ্যালু সমস্যায় পরিণত হয়
  • একটি সত্যিকারের ছোট স্প্রিং-মাস সিস্টেমে পাওয়ার মেথড ও শিফটেড ইনভার্স পাওয়ার মেথড প্রয়োগ করে দুটি ভাইব্রেশন মোড বের করা
  • আইগেনভ্যালু কীভাবে স্ট্রাকচারাল ও ডাইনামিক্যাল সিস্টেমের স্ট্যাবিলিটি নির্ধারণ করে (সংক্ষিপ্ত ধারণাগত সংযোগ)
  • PCA কীভাবে কোভ্যারিয়ান্স ম্যাট্রিক্সের আইগেনভেক্টর ব্যবহার করে — এবং কেন এটি M8-এর একই গণনার পুনর্ব্যবহার

১ · ভাইব্রেশন মোড ও ন্যাচারাল ফ্রিকোয়েন্সি

একটি সরল মেকানিক্যাল উদাহরণ ভাবুন: দুটি সমান ভর (m = 1), দুই দেয়ালের মাঝে তিনটি সমান স্প্রিং (স্টিফনেস k = 1) দিয়ে যুক্ত — দেয়াল-ভর১-ভর২-দেয়াল। এই সিস্টেমের গতির সমীকরণ থেকে (নিউটনের দ্বিতীয় সূত্র প্রতিটি ভরে প্রয়োগ করে) একটি স্টিফনেস ম্যাট্রিক্স পাওয়া যায়:

$$K = \begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix}$$

এই সিস্টেম যখন মুক্তভাবে দোলে (কোনো বাহ্যিক বল ছাড়া), তার সমাধান একটি আইগেনভ্যালু সমস্যায় পরিণত হয়: K x = ω² x, যেখানে x হলো ভাইব্রেশনের আকৃতি (mode shape) এবং ω হলো ন্যাচারাল ফ্রিকোয়েন্সি (কৌণিক)। অর্থাৎ K-এর আইগেনভ্যালুই হলো ω², আর আইগেনভেক্টর হলো সেই ফ্রিকোয়েন্সিতে সিস্টেমটি ঠিক কীভাবে দোলে তার আকৃতি।

মোড শেপ
প্রতিটি আইগেনভেক্টর বলে দেয় সেই ফ্রিকোয়েন্সিতে কোন ভরগুলো একসাথে না বিপরীতে দুলছে।
রেজোন্যান্স
যদি বাহ্যিক বলের ফ্রিকোয়েন্সি একটি ন্যাচারাল ফ্রিকোয়েন্সির কাছাকাছি হয়, সিস্টেম বিপজ্জনকভাবে বড় দোলনে পৌঁছাতে পারে — সেতু ও ভবন ডিজাইনে এই আইগেনভ্যালুগুলো তাই আগে থেকেই জানা জরুরি।
কেন M8-এর মেথড দরকার
বাস্তব স্ট্রাকচারে স্টিফনেস ম্যাট্রিক্স শত-হাজার সারি-কলামের হতে পারে — characteristic polynomial দিয়ে সরাসরি বের করা অসম্ভব, তাই পাওয়ার/শিফটেড/QR মেথড অপরিহার্য।

২ · সত্যিকারের ডেমো — দুটি ভাইব্রেশন মোড পাওয়ার মেথড দিয়ে

নিচের কোড সেলে L38-এর matvec/norm ও L39-এর gauss_solve-ভিত্তিক শিফটেড ইনভার্স পাওয়ার মেথড পুনর্ব্যবহার করে K-এর দুটি আইগেনভ্যালুই বের করা হয়েছে — প্রথমে সরল পাওয়ার মেথড দিয়ে ডমিন্যান্ট (উচ্চতর ফ্রিকোয়েন্সির) মোড, তারপর শিফট ০.৫ দিয়ে অন্য মোডটি:

Python
import math

K = [
    [2.0, -1.0],
    [-1.0, 2.0],
]

def matvec(M, v):
    return [sum(M[i][j] * v[j] for j in range(len(v))) for i in range(len(M))]

def norm(v):
    return math.sqrt(sum(x * x for x in v))

def gauss_solve(M, b):
    n = len(M)
    aug = [row[:] + [b[i]] for i, row in enumerate(M)]
    for col in range(n):
        piv = max(range(col, n), key=lambda r: abs(aug[r][col]))
        aug[col], aug[piv] = aug[piv], aug[col]
        pivot_val = aug[col][col]
        for row in range(col + 1, n):
            factor = aug[row][col] / pivot_val
            for k in range(col, n + 1):
                aug[row][k] -= factor * aug[col][k]
    x = [0.0] * n
    for row in range(n - 1, -1, -1):
        s = aug[row][n] - sum(aug[row][k] * x[k] for k in range(row + 1, n))
        x[row] = s / aug[row][row]
    return x

# --- মোড ১: সরল পাওয়ার মেথড -- ডমিন্যান্ট (উচ্চতর) আইগেনভ্যালু ---
v = [1.0, 0.3]
prev_eig = None
for i in range(1, 9):
    w = matvec(K, v)
    v = [x / norm(w) for x in w]
    Av = matvec(K, v)
    eig = sum(v[k] * Av[k] for k in range(len(v)))
    prev_eig = eig

print(f"মোড ১ (ডমিন্যান্ট): omega^2 = {prev_eig:.6f}   omega = {math.sqrt(prev_eig):.6f}")
print(f"মোড আকৃতি (আইগেনভেক্টর): {[round(x, 6) for x in v]}")

# --- মোড ২: শিফটেড ইনভার্স পাওয়ার মেথড, শিফট = ০.৫ -- অন্য আইগেনভ্যালু ---
shift = 0.5
Ks = [[K[i][j] - (shift if i == j else 0.0) for j in range(2)] for i in range(2)]
v2 = [1.0, -0.5]
prev_eig2 = None
for i in range(1, 8):
    w = gauss_solve(Ks, v2)
    v2 = [x / norm(w) for x in w]
    Av2 = matvec(K, v2)
    eig2 = sum(v2[k] * Av2[k] for k in range(len(v2)))
    prev_eig2 = eig2

print()
print(f"মোড ২: omega^2 = {prev_eig2:.6f}   omega = {math.sqrt(prev_eig2):.6f}")
print(f"মোড আকৃতি (আইগেনভেক্টর): {[round(x, 6) for x in v2]}")

    
সত্যিকারের আউটপুট দেখায় মোড ১ কনভার্জ করে ω² ≈ ২.৯৯৯৯৯৯৮৪-এ (অর্থাৎ প্রকৃত মান ৩, তাই ω = √৩ ≈ ১.৭৩২০৫১), আইগেনভেক্টর [০.৭০৭৩০৭, −০.৭০৬৯০৭] — অর্থাৎ দুই ভর বিপরীত দিকে দোলে (একটি বামে গেলে অন্যটি ডানে), যা উচ্চতর ফ্রিকোয়েন্সির "অ্যান্টি-সিমেট্রিক" মোড। মোড ২ কনভার্জ করে ω² = ১.০০০০০০০০-এ (অর্থাৎ ω = ১), আইগেনভেক্টর [০.৭০৭১৩৪, ০.৭০৭০৮] — দুই ভর একই দিকে, একসাথে দোলে, একটি নিম্নতর-ফ্রিকোয়েন্সির "সিমেট্রিক" মোড। এই দুটি সংখ্যা (১ ও ৩) ঠিক এমন একটি সিমেট্রিক ২×২ ম্যাট্রিক্সের জন্য প্রত্যাশিত প্রকৃত আইগেনভ্যালু — সত্যিকারের গণনা তাত্ত্বিক ফলাফলের সাথে হুবহু মিলে যায়।

৩ · স্ট্যাবিলিটি — আইগেনভ্যালুর চিহ্ন কী বলে

M6/L32-এ দেখা গিয়েছিল একটি ODE সলভার কীভাবে "স্টিফ" সমীকরণে অস্থিতিশীল হয়ে বিস্ফোরিতভাবে বেড়ে যেতে পারে। এর পেছনের গাণিতিক কারণটাও আইগেনভ্যালু-নির্ভর: একটি লিনিয়ার ডাইনামিক্যাল সিস্টেম dx/dt = Ax-এর সমাধান সময়ের সাথে A-এর আইগেনভ্যালুর real part-এর চিহ্ন অনুযায়ী আচরণ করে —

Re(λ) < 0 সব আইগেনভ্যালুতে
সিস্টেম সময়ের সাথে শূন্যের দিকে ক্ষয় পায় — স্থিতিশীল।
যেকোনো Re(λ) > 0
সেই দিকে সিস্টেম বিস্ফোরিতভাবে বেড়ে যায় — অস্থিতিশীল।
জটিল (complex) আইগেনভ্যালু
কাল্পনিক অংশ থাকলে সিস্টেম দুলতে দুলতে (oscillate) ক্ষয় পায় বা বাড়ে, real part-এর চিহ্ন অনুযায়ী।

এই কারণেই কন্ট্রোল সিস্টেম ও স্ট্রাকচারাল ইঞ্জিনিয়ারিংয়ে আইগেনভ্যালু বিশ্লেষণ এত গুরুত্বপূর্ণ — একটি ব্রিজ, বিমানের ডানা, বা রোবোটিক আর্মের গতিসূত্রের ম্যাট্রিক্সের আইগেনভ্যালু গণনা করে আগে থেকেই বলা যায় সিস্টেমটি নিজে থেকে স্থিতিশীল থাকবে নাকি নিয়ন্ত্রণ ছাড়া অস্থিতিশীল হয়ে উঠবে — এই কোর্সের M12/L53-এ ফিজিক্স ও ইঞ্জিনিয়ারিং সিমুলেশন প্রসঙ্গে আরও দেখা যাবে।

৪ · PCA-এর সংযোগ — মেশিন লার্নিংয়ে একই গণনা

মেশিন লার্নিংয়ে Principal Component Analysis (PCA) একটি অত্যন্ত জনপ্রিয় ডাইমেনশনালিটি- রিডাকশন কৌশল, যা ../machine-learning/ কোর্সে বিস্তারিত পড়ানো হয় — এখানে শুধু এর আইগেনভ্যালু-সংযোগটুকু দেখানো হচ্ছে, পুরো ডেরিভেশন নয়। মূল ধারণা: একটি ডেটাসেটের কোভ্যারিয়ান্স ম্যাট্রিক্স (কোন ফিচারগুলো একসাথে পরিবর্তিত হয় তা মাপে) গণনা করার পর, তার ডমিন্যান্ট আইগেনভেক্টরই সেই দিক যেখানে ডেটার ভ্যারিয়েন্স (বিস্তৃতি) সবচেয়ে বেশি — একে বলা হয় প্রথম প্রিন্সিপাল কম্পোনেন্ট। দ্বিতীয় সবচেয়ে বড় আইগেনভ্যালুর আইগেনভেক্টর দেয় দ্বিতীয় প্রিন্সিপাল কম্পোনেন্ট, ইত্যাদি — ঠিক L40-এর QR অ্যালগরিদম যেভাবে একবারে একাধিক আইগেনভ্যালু/ভেক্টর প্রকাশ করেছিল।

L38-এর ডেমোর ম্যাট্রিক্স A = [[4,1,1],[1,3,1],[1,1,2]] সিমেট্রিক ও পজিটিভ-ডেফিনিট — ঠিক কোভ্যারিয়ান্স ম্যাট্রিক্সের মতোই বৈশিষ্ট্য (যদিও এটি বাস্তব কোনো ডেটাসেট থেকে গণনা করা নয়, শুধু একটি উদাহরণ)। এর ডমিন্যান্ট আইগেনভ্যালু ৫.২১৪৩২ ও আইগেনভেক্টর [০.৭৫৫৭৭৪, ০.৫২০৬৭৬, ০.৩৯৭১১৮] — যদি A সত্যিই কোনো তিন-ফিচার ডেটাসেটের কোভ্যারিয়ান্স ম্যাট্রিক্স হতো, এই আইগেনভেক্টরটিই হতো "প্রথম প্রিন্সিপাল কম্পোনেন্ট"-এর দিক, আর ৫.২১৪৩২ সংখ্যাটি বলে দিত সেই দিকে ডেটার ভ্যারিয়েন্স ঠিক কতটা।

মূল কথা · Key takeaway

পাওয়ার মেথড, শিফটেড ইনভার্স পাওয়ার মেথড, ও QR অ্যালগরিদম — এই তিনটি M8-এর গাণিতিক যন্ত্র শুধু বিমূর্ত গণিত নয়। একই matvec/gauss_solve-ভিত্তিক কোড, বিভিন্ন প্রেক্ষাপটে প্রয়োগ করলে, একটি ব্রিজের রেজোন্যান্স ফ্রিকোয়েন্সি বের করে দিতে পারে, একটি কন্ট্রোল সিস্টেমের স্ট্যাবিলিটি যাচাই করতে পারে, অথবা একটি মেশিন লার্নিং মডেলের জন্য ডেটার সবচেয়ে গুরুত্বপূর্ণ দিকগুলো খুঁজে বের করতে পারে। M9-এ (অপ্টিমাইজেশন) এই কোর্স এমন আরেকটি বহু-ব্যবহারযোগ্য গাণিতিক যন্ত্রে যাবে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ মোড ১-এর আইগেনভেক্টর [০.৭০৭৩০৭, −০.৭০৬৯০৭] — দুই এন্ট্রির চিহ্ন বিপরীত। এর পদার্থবিজ্ঞানগত অর্থ কী?

এই আইগেনভেক্টরের প্রতিটি এন্ট্রি সংশ্লিষ্ট ভরের সরণ (displacement) নির্দেশ করে। বিপরীত চিহ্ন মানে যখন ভর ১ ডানে সরে, ভর ২ একই মুহূর্তে বামে সরে — অর্থাৎ দুই ভর একে অপরের বিপরীত দিকে দোলে, স্প্রিং মাঝেরটাকে সবচেয়ে বেশি চাপ/টান দেয়, যা এই মোডকে উচ্চতর ফ্রিকোয়েন্সি (ω = √৩) দেয় — মোড ২-এর তুলনায় (যেখানে উভয় ভর একই দিকে দোলে, মাঝের স্প্রিং প্রায় অপরিবর্তিত থাকে, তাই ফ্রিকোয়েন্সি কম, ω = ১)।

প্র ০২ যদি একটি সিস্টেমের আইগেনভ্যালুর মধ্যে একটি সম্পূর্ণ জটিল সংখ্যা (নন-জিরো কাল্পনিক অংশ) থাকে, এর মানে সিস্টেমটি সরাসরি অস্থিতিশীল?

না — জটিল আইগেনভ্যালু নিজে থেকে অস্থিতিশীলতা নির্দেশ করে না, এটি নির্দেশ করে সিস্টেম দুলবে (oscillate)। সিদ্ধান্তমূলক বিষয় হলো real part-এর চিহ্ন — যদি real part ঋণাত্মক হয়, দোলন ধীরে ধীরে ক্ষয় পাবে (স্থিতিশীল কিন্তু দোলনশীল, যেমন একটি শক-অ্যাবজর্বার), আর real part ধনাত্মক হলে দোলন ক্রমশ বড় হতে থাকবে (অস্থিতিশীল)।

প্র ০৩ L38-এর ম্যাট্রিক্স A-কে "ডেমো কোভ্যারিয়ান্স ম্যাট্রিক্স" হিসেবে ব্যবহার করা হলো, যদিও এটি বাস্তব ডেটা থেকে গণনা করা নয়। বাস্তব PCA-তে কোভ্যারিয়ান্স ম্যাট্রিক্সের কী বৈশিষ্ট্য থাকতেই হবে যাতে পাওয়ার মেথড প্রয়োগযোগ্য হয়?

একটি বৈধ কোভ্যারিয়ান্স ম্যাট্রিক্স সবসময় সিমেট্রিক এবং পজিটিভ সেমি-ডেফিনিট হয় (সব আইগেনভ্যালু ≥ ০ — ভ্যারিয়েন্স কখনো ঋণাত্মক হতে পারে না)। এই দুই বৈশিষ্ট্যের কারণেই পাওয়ার মেথড/QR অ্যালগরিদম এই ধরনের ম্যাট্রিক্সে বিশেষভাবে ভালো ও নির্ভরযোগ্যভাবে কাজ করে (Rayleigh quotient-এর সিমেট্রিক-ম্যাট্রিক্স-ভিত্তিক কনভারজেন্স গ্যারান্টি L38-এ আলোচিত হয়েছিল), এবং বাস্তব ডেটার কোভ্যারিয়ান্স ম্যাট্রিক্স স্বয়ংক্রিয়ভাবেই এই শর্ত পূরণ করে।

অনুশীলন

  1. চিন্তা করুন: মোড ১-এর ফ্রিকোয়েন্সি ω = √৩ ≈ ১.৭৩২ এবং মোড ২-এর ω = ১। কোন মোডে সিস্টেমটি প্রতি সেকেন্ডে বেশি দ্রুত দুলবে?

    মোড ১ (ω ≈ ১.৭৩২) — কৌণিক ফ্রিকোয়েন্সি যত বেশি, দোলন তত দ্রুত। এটি সেই মোড যেখানে দুই ভর বিপরীত দিকে দোলে, মাঝের স্প্রিংকে সবচেয়ে বেশি কাজ করতে বাধ্য করে, তাই দ্রুততর দোলন।

  2. পরীক্ষা করুন: কোড সেলে স্টিফনেস ম্যাট্রিক্স K-এর মাঝের সংযোগ স্প্রিং শক্তিশালী করে K = [[3.0, -1.0], [-1.0, 3.0]] করে দিন (তিনটি স্প্রিং-ই কিছুটা শক্ত করা, তবে সরলতার জন্য শুধু ডায়াগোনাল বদলানো হলো) এবং Run চাপুন। মোড ১-এর ω কি বাড়ে না কমে?

    বাড়ে — নতুন K-এ মোড ১-এর আইগেনভ্যালু হবে ৪ (অর্থাৎ ω = ২), আগের ω ≈ ১.৭৩২-এর চেয়ে বেশি। এটি বাস্তবেও প্রত্যাশিত — শক্তিশালী (stiffer) স্প্রিং/ স্ট্রাকচার সবসময় উচ্চতর ন্যাচারাল ফ্রিকোয়েন্সিতে দোলে, ভারী বা নরম স্ট্রাকচারের তুলনায়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
QR অ্যালগরিদম